עזרה ב- C בקשר לאנימציה... - עמוד 2 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


moses_23

Recommended Posts

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

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

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

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

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

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

קישור לתוכן
שתף באתרים אחרים

הבעיה היא שאין את האפשרויות האלה ב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, הסדר של הציור/מחיקה צריך להיות מימין לשמאל).

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...