עבור לתוכן

עזרה ב- C בקשר לאנימציה...

Featured Replies

פורסם
  • מחבר

אז בשביל שזה לא יהבהב משחירים אותו...

עושים

setcolor(BLACK)

פורסם

לא ניסיתי אבל אני יודע שבגרפיקה משתמשים תמיד בשכבה ניראת ושכבת עבודה וכל פעם אומרים לכרטיס מסך לעשות פליפ

פורסם
  • מחבר

אני עדיין רק בהתחלה, ב- 2D

אנחנו רוצים להתחיל 3D

פורסם

לא ברור לי עדיין אם ההבהוב שיש אצלך זה בגלל חוסר vsync, או פשוט בגלל שאתה מוחק ומצייר מחדש. (בדיקה פשוטה יחסית - תנסה את זה על מסך LCD)

האמת שאף פעם לא עבדתי עם ה- BGI, הוא היה ישן עוד לפני 8 שנים אבל נראה לי שקצת קשה לממש בו page flipping או double buffering.

שלא לדבר על מצבים גרפיים נורמאליים.

את ההבהוב שנגרם מזה שאתה מוחק ומצייר אתה יכול לפתור פשוט ע"י זה שלא תמחק שטח שאתה הולך לצייר עליו.

אתה ההבהוב שנובע מחוסר vsync קצת יותר קשה לפתור ב- BGI עד כמה שאני יודע. אתה יכול להקטין אותו אם תצייר רק עם קוים אופקיים (וכאמור, הוא לא קיים על מסכי LCD)

עוד דרך לפתור את שני סוגי ההבהובים זה באמת זה עם טכניקות של page-flipping (קצת ארכאי) או double-buffering (עדיין בשימוש). עד כמה שאני יודע קצת קשה לממש את זה עם ה- BGI, אבל לעומת זה עם Allegro זה מאוד קל.

פורסם

יש לי מסך LCD

אני דיברתי על ההבהוב של מחיקת מסך מלאה ואחריי התחלת הציור מה שיוצר דיליי מסויים בין פריים לפריים הניראה לעין כהבהוב

פורסם
  • מחבר

אולי מישהו יכול להביא לי את הקטע של התוכנית?

אני צריך להבין את הנושא

פורסם

הבעיה היא שאין את האפשרויות האלה בBORLAND C(לפחות לא לפי קובצי העזרה שלהם).

הדבר הדומה ביותר לזה הוא שימוש בIMAGE. תחפש בעזרה חומר על זה.

אם אתה רוצה בניתי כמה פונ שעוסקות בשמירה של קבצים עם הפורמט הזה ופתיחה, ואף בניתי צייר פשוט של זה. אם אתה רוצה אני אשלח.

פורסם
  • מחבר

אתה ממש לא בכיוון שלי אח שלי...

אנחנו לא אמורים לבנות תוכנה...

תנסה להריץ את הקוד הזה בתוכנת ה- C שלך:


#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

int main(void)
{
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
int xmax, ymax;

/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "");

setcolor(BLUE);
xmax = getmaxx();
ymax = getmaxy();

/* draw a diagonal line */
line(350, 200, xmax, ymax);

/* clean up */
getch();
closegraph();
return 0;
}

אז הוא יראה לך קו באמצע המסך נראה לי...

עכשיו אני צריך שהוא יזוז שמאלה או ימינה עם הפונקציה DELAY

איך אני עושה זאת?

פורסם

אתה צריך לממש דבר שנקרא event-loop או game-loop.

זו לולאה שבכל ריצה שלה קורים 3 דברים:

קלט מהמשתמש (בהיעדר פונקציות לקלט א-סינכרוני אתה יכול לעשות את זה עם kbhit() ו- getch()

עדכון של מבנה הנתונים (עדכון המיקום של הקו)

עדכון המסך. במקרה שלך הדבר הכי מוצלח יהיה כנראה לצייר את הקו החדש ולמחוק את השאריות של הישן (הסדר דווקא כן משנה אם אתה רוצה למנוע בעיות vsync, הסדר של הציור/מחיקה צריך להיות מימין לשמאל).

פורסם

מומלץ קודם למחוק את הקו, לשנות את המיקום שלו, ואז לצייר אותו מחדש בגלל אותן בעיות שהוצגו קודם לכן.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים