פורסם 2005 במרץ 1220 שנים מחבר ואללה תודה.... אני כבר יראה למרצה שלי על מה חשבתי ומה התחלתי לעשות, כי אני לא ממש מצליח לממש את זה. לא ביצירה של האויבייקטים עצמם על המסך (יצירה של שני אובייקטים על המסך בעת ובעונה אחת) ולא בכמעט כלום וזה מתחיל לתסכל קצת... בקיצר, ביומיים הקרובים אין לי ברירה אלא לשים את הפרוייקט בצד. אני אעדכן ברגע שייצא עוד משהו מזה, שזה יתקדם. (עוד בערך שבוע) אגב, פונקציה וירטואלית = 0 זה דריסה (Override), בדקתי את זה, ואכן צריך אותם פרמטרים... צריך איכשהו להתגבר על זה.
פורסם 2005 במרץ 1220 שנים אני מתכנת כבר 8 שנים ב- C++, ג'אוה ודלפי. אני חושב שיש לי מושג על מה אני מדבר.ל- RK:ב- C++, כל מה שההגדה "=0" (pure virtual) אומרת היא שהמחלקה היא אבסטרקטית, וחייבים לדרוס את הפונקציה במחלקות הבנים.לי זה נראה כאילו פונקציות הציור שלך התנהגות כמו פונקציות סטטיות - כלומר - הן לא משתמשות במידע שנמצא על האובייקט.(כלומר אתה מצייר מלבן ע"י פונקציה כמו CRectangle::Draw(int left, int top, int right, int bottom)מה שאתה אמור לעשות, זה שהפרמטרים שספצפיים ל- class יישמרו על האובייקט.למשל (אני אשתמש בתחביר של java כי אני לא לגמרי זוכר איך זה הולך ב- C#)- אתה יוצר מלבן ע"י CRect myrect = new CRect(int width, int height)ואז אתה יכול להכניס אותו לרשימה של CShape (בהנחה ש- CRect יורש מ- CShape).כשאתה רוצה לצייר צורה, אתה אמור לעשות משהו כמוCShape curShape = shapeList.getAt(i)ואזלקרוא ל- curShape.draw(x, y( (כאשר x ו- y הוא המיקום של הצורה).באותו אופן אתה יכול גם לשמור את המיקום (והצבע, ועובי הקו ומה שבא לך) של כל צורה בתוך CShape ואז פונקציית ה- draw לא צריכה לקחת פרמטרים בכלל.נו, קיויתי שה- quotes יעזור נגד ההפיכה של הסוגריים, אבל זה לא עבד...
פורסם 2005 במרץ 2020 שנים היי.אני במקומך קודם כל הייתי מסתכל על האובייקט Graphics. זה האובייקט שבעצם יודע "לצייר" בדוט נט.שקלת אולי שימוש בReflection? נגיד ליצור קלאס שמה שהוא מכיל זה שם של פונקציה בתוך Graphics ואת הארגומנטים... תוכל לחסוך לך הרבה בלאגן.בכל מקרה, אם יש לך שאלות, תרגיש חופשי לפנות אלי...בהצלחה!
פורסם 2005 באפריל 120 שנים מחבר טוב, חבריםעבדתי עוד קצת על הפרוייקט הקטן שלי,ואני דיי מתקדם.(כבר ניתן לצייר כל מיני צורות על המסך, יש קלאסים יורשים מshape אבסטרקטי ועוד)כרגע אני נתקעתי בבעיה קצת מעצבנת, אני רוצה להזיז צורה (ללחוץ עליה, ואז כל עוד העכבר לחוץ אני מזיז את הצורה)אני מצליח לזהות את הצורה עליה לחצתי (אם יש צורות אחת על השניה - קצת בעייתי בינתיים)אבל שאני מזיז אותה, היא קצת קופצת, לא זזה בדיוק כמו שאני רוצה, ואני לא מצליח להתגבר על זההזה הקוד של ההזזה (כבר של הצורה שבחרתי) ((Shape)Figures[figureIndex]).start.X = StartMove.X + e.X - W; ((Shape)Figures[figureIndex]).start.Y = StartMove.Y + e.Y - H; ((Shape)Figures[figureIndex]).end.X = EndMove.X + e.X - W; ((Shape)Figures[figureIndex]).end.Y = EndMove.Y + e.Y - H;כש STARTMOVE היא הקואורדינטה הראשונית של הצורה, שאותה אני שומר, כנל גם ENDMOVEe.Y/X היא האלמנט של העכבר (הנקודה שלו) , H גובה, W רוחבתודה
פורסם 2005 באפריל 120 שנים הממ, אני רואה שבכל זאת אתה עובד בלי מצביעים ומחמיץ את כל הקטע של פולימורפיזם.בבעיה שאתה נתקל בה נתקל כל מי שמנסה לממש drag בפעם הראשונה (ובדר"כ גם בפעם השניה...)הפונקציה שבה מוכל הקוד ששלחת נקראת תוך כדי הזזה או רק בסוף הזזה?יש לך שתי דרכים לעשות את זה - דרך אחת - בתחילת ההזזה לשמור את המיקום ההתחלתי של הצורה וגם את מיקום הלחיצה של העכבר, ואז בכל פעם שאתה רוצה לחשב את המיקום החדש, אתה לוקח את המיקום הישן ומחבר את ההפרש בין מיקום העכבר הנוכחי למיקום העכבר בתחילת הלחיצה.דרך שניה (בלי לשמור את מיקום הצורה) - אתה שומר את מיקום העכבר, ובכל פעם אתה מחבר למיקום הצורה את ההפרש בין מיקום העכבר הנוכחי לזה ששמרת, ואז שומר את מיקום העכבר הנוכחי במקום זה ששמרת קודם.בקוד שכתבת לא ממש הבנתי איך השתמשת ב- H ו- W ומה הם קשורים לעניין.
פורסם 2005 באפריל 120 שנים מחבר אתה דיי טועהאני כן משתמש בפולימופיזם (זה למעשה הגדולה של C#...ואין פה מצביעים, הכל reference)ביצירת צורה, יש לך יורשים, של מלבן, אליפסה וקו בינתיים.הפרמטרים נמצאים בתוך הEVENTpictureBox1_MouseMoveתחת תנאים מסויימיםאני שומר פה את הקואורדינטות של הצורה בהתחלה לפני ההזזה.ניסיתי את מה שהצעת (דרף שניה, נראת יותר אלגנטית) וזה עובד כמו גדול,תודה!(את H וW הייתי צריך מקודם... סתם ניסוי וטעיה, זה יצא הכי טוב)זה הקוד המתוקן ((Shape)Figures[figureIndex]).start.X += (e.X - P_start.X); ((Shape)Figures[figureIndex]).start.Y += (e.Y - P_start.Y); ((Shape)Figures[figureIndex]).end.X += (e.X - P_start.X); ((Shape)Figures[figureIndex]).end.Y += (e.Y - P_start.Y); P_start.X = e.X; P_start.Y = e.Y;
פורסם 2005 באפריל 220 שנים טוב, סליחה, חשבתי שזה C++.אבל למה ה- casting בכל שורה ל- Shape? לא הוסיפו בגרסא של .NET 2003 משהו דומה ל- templates/generics שמאפשר לך להגדיר container של אובייקטים מסוג מסויים?
פורסם 2005 באפריל 220 שנים מחבר אם אני לא עושה את הcasting לbase class אני לא יכול להשתמש בשום מתוד או שדה שלוו.Figures הוא container מסוג object, אוכל הכל, (סוג נתונים ArrayList אם אתה מכיר)אבל אני צריך איכשהו לעשות לו unboxing.
פורסם 2005 באפריל 220 שנים זהו, שאתה עושה downcasting (אתה ממיר מ- Object ל- Shape)בתוכניות קטנות זה לא כזה קריטי, אבל לא כדאי להתרגל לזה.בכלל, downcasting זה דבר שרצוי להימנע ממנו אם אפשר, כלומר - אם אתה יכול - תשתמש ב- container של Shape ולא של Objects.
פורסם 2005 באפריל 220 שנים מחבר ברור שזה פחות רצוי, אבל אחרת אני אצטרך לממש את ArrayList בעצמי, ואין לי ממש כח לזה.
פורסם 2005 באפריל 220 שנים מחבר כן, סבבה...קבל בינתיים גרסא התחלתית (של עכשיו)...[attachment deleted by admin - 90 dayss]
פורסם 2005 באפריל 320 שנים {שגיאת יישום} אתחול תקין של היישום נכשל (0xc0000135). לחץ על אישור כדי לסגור את היישום.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.