ABA


"האם יש דרך לראות איזה חלק מהקוד רץ בזמן אמת? (Java)"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #21378 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 21378
TooBigToFail
חבר מתאריך 12.5.14
1917 הודעות, 1 פידבק, -2 נקודות
   07:25   09.08.15   
אל הפורום  
  האם יש דרך לראות איזה חלק מהקוד רץ בזמן אמת? (Java)  
 
   אני מנסה ללמוד את הקוד של המשחק הפשוט pong

http://vignette2.wikia.nocookie.net/uncyclopedia/images/2/28/John_McEnroe_Pong.gif


הורדתי OPEN SOURCE שמתאים לאנדרואיד, אני עובד עם ANDROID STUDIO והקוד עובד והכל, אבל אני רוצה ללמוד איזה חלק של הקוד עובד בדיוק באותו רגע.

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

האם יש דרך לראות את הקוד רץ בזמן אמת (ולשלוט במהירות שבה הקוד מבוצע בזמן אמת?)? אני לא מתכוון לפונקציות ספריה, אלא רק לקוד של המשחק, שהוא יחסית קצר.

לחילופין, יש לכם דרך אחרת ללמוד את הקוד ולדעת באיזה רצף כל פונקציה נקראת? מאוד קשה לפענח מהקוד איזה חלק של הקוד מתבצע מתי.


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  תשתמש בלוגים NoBuddy 09.08.15 23:59 1
     תודה! לצערי זה מראה רק שורות של הFPS של המשחק ולא מה שהקוד מריץ כרגע TooBigToFail 10.08.15 03:56 2
         תוסיף קוד משלך NoBuddy 10.08.15 14:02 14
             תודה על התגובה למרות שההצעה האחרת של הדפסת שורה על המסך מספיק ברורה TooBigToFail 10.08.15 14:16 15
                 זאת אותה הצעה, רק שבאנדרואיד נהוג להשתמש ב LogCat בשביל השימוש הזה NoBuddy 10.08.15 14:24 16
  לא כל כך הבנתי מה אתה רוצה שיקרה אם לא עצירה ? cfirzzz 10.08.15 12:55 3
     שאלה טובה TooBigToFail 10.08.15 13:09 4
         מה נגיד אתה לא מבין? משה הלולן 10.08.15 13:16 5
             הוספה משה הלולן 10.08.15 13:20 6
                 נראה שמדובר שם על פיזיקה ברמת הרבה יותר מסובכת TooBigToFail 10.08.15 13:23 9
             הדוגמא למתודה של הרוחב שהבאת ברורה, אבל החישובים האחרים לא ברורים TooBigToFail 10.08.15 13:20 7
                 הבנתי פשוט הסברתי לך שאתה מתמקד במשהו שאתה לא זקוק לו.. משה הלולן 10.08.15 13:23 8
                     אם הייתי רואה מתי בדיוק כל משפט התניה מחושב אולי זה כן היה עוזר TooBigToFail 10.08.15 13:25 10
                         הסברתי לך, אני יתן לך עוד דוגמא שאני הייתי עושה משה הלולן 10.08.15 13:31 11
                             רעיון מעניין! אפשר גם להדפיס משהו על המסך באמצע התניה מסוימת TooBigToFail 10.08.15 13:34 12
                                 אני מצליח להבין שההתניה הראשונה רצה כשהכדור פוגע במחבט העליון TooBigToFail 10.08.15 14:27 17
                                     אני רק מנחש כי אין לי זמן לעבור על הקוד אבל משה הלולן 10.08.15 14:50 18
  אגב הקוד המלא נמצא כאן: TooBigToFail 10.08.15 13:35 13

       
NoBuddy
חבר מתאריך 2.7.02
14473 הודעות, דרג אמינות חבר זה
   23:59   09.08.15   
אל הפורום  
  1. תשתמש בלוגים  
בתגובה להודעה מספר 0
 
   http://developer.android.com/tools/debugging/debugging-log.html

נשלח ע"י הסלולרי


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TooBigToFail
חבר מתאריך 12.5.14
1917 הודעות, 1 פידבק, -2 נקודות
   03:56   10.08.15   
אל הפורום  
  2. תודה! לצערי זה מראה רק שורות של הFPS של המשחק ולא מה שהקוד מריץ כרגע  
בתגובה להודעה מספר 1
 
   הפעלתי את הLOGCAT בלי שום פילטר, ואחרי מליון שורות בזמן שהאמולטור ובזמן שהמשחק עולה, זה מראה רק על כמה FPS המשחק רץ בזמן שהמשחק עובד... שזה למעשה אותו מידע שאני רואה בתוך הIDE בזמן שהמשחק רץ.

יכול להיות שאני משתמש בכלי הזה לא נכון והוא כן אמור להראות את המידע מאחורי הקלעים (המתודות) בזמן הרצה? או שאולי אתה מכיר עוד דרך לבדוק את זה?

האמת שאם היה משהו שמראה לי אפילו ברמת השפת מכונה (בקוד אסמבלי) זה היה עוזר כי הייתי יכול להבין את ההגיון משם. אבל כמובן העדיפות היא לשפה קצת יותר גבוהה P:


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
NoBuddy
חבר מתאריך 2.7.02
14473 הודעות, דרג אמינות חבר זה
   14:02   10.08.15   
אל הפורום  
  14. תוסיף קוד משלך  
בתגובה להודעה מספר 2
 
   ערכתי לאחרונה בתאריך 10.08.15 בשעה 14:17 בברכה, NoBuddy
 
משהו כמו

Log.i("MyActivity", "MyClass.getView() — get item number " + position);

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TooBigToFail
חבר מתאריך 12.5.14
1917 הודעות, 1 פידבק, -2 נקודות
   14:16   10.08.15   
אל הפורום  
  15. תודה על התגובה למרות שההצעה האחרת של הדפסת שורה על המסך מספיק ברורה  
בתגובה להודעה מספר 14
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
NoBuddy
חבר מתאריך 2.7.02
14473 הודעות, דרג אמינות חבר זה
   14:24   10.08.15   
אל הפורום  
  16. זאת אותה הצעה, רק שבאנדרואיד נהוג להשתמש ב LogCat בשביל השימוש הזה  
בתגובה להודעה מספר 15
 
   ובכיף.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
cfirzzz לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.8.02
5060 הודעות, 2 פידבק, 4 נקודות
   12:55   10.08.15   
אל הפורום  
  3. לא כל כך הבנתי מה אתה רוצה שיקרה אם לא עצירה ?  
בתגובה להודעה מספר 0
 
   הרי אם הקוד ירוץ אתה לא באמת תצליח לקרוא משהו ממנו


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TooBigToFail
חבר מתאריך 12.5.14
1917 הודעות, 1 פידבק, -2 נקודות
   13:09   10.08.15   
אל הפורום  
  4. שאלה טובה  
בתגובה להודעה מספר 3
 
   ערכתי לאחרונה בתאריך 10.08.15 בשעה 13:17 בברכה, TooBigToFail
 
אני יותר מחפש דרך על איך להבין את כל החישובים שעושים במשחק עם הוקטורים ומשפטי ההתניה המורכבים שם.
אני מניח שאם אני אוכל לראות את הקוד בהתאם למה שקורה על המסך, תהיה לי הבנה טובה יותר לגבי מה רץ מתי..
אולי אני פשוט צריך הנחיה על איך להשתמש בDEBUGGER (איפה כדאי לשים את התנאי עצירה, באופן כללי) כדי להבין את הרצף של התוכנית טוב יותר

ב"רצף של התוכנית" אני מתכוון לאיזו מתודה נקראת מתי, ואחרי זה מתודה, ולאיזה מתודה היא קוראת בתוכה - כל אלה בהתאם למה שקורה על המסך.

הנה דוגמא:
הייתי רוצה להבין למה בתנאי הראשון אם המהירות קטנה מX, וגם הפוזיציה של X פחות הרדיוס (רדיוס של מה זה?) קטן מהרוחב של המחבט, וגם יש נגיעה במחבט, אז לבצע את השינויים למשתנים בפנים (שגם אותם לא ברור לי למה עושים)



public void draw(Canvas canvas) {
if (reset) return;
if (position == null) position = new Vector(getDisplayWidth() / 2, getDisplayHeight() / 2);
if (velocity == null) velocity = new Vector(-(getDisplayWidth() / 92), 0);
float radius = 5 * getDensity();

position.x += velocity.x;
position.y += velocity.y;

if (!gameover) {
if (velocity.x < 0
&& position.x - radius < paddleOne.getWidth()
&& touchedPaddle(paddleOne)) {
velocity.x *= -1;
velocity.y += getVelocityY(paddleOne, radius);
position.x = paddleOne.getWidth() + radius * 2;
}

if (velocity.x > 0
&& position.x + radius > getDisplayWidth() - paddleTwo.getWidth()
&& touchedPaddle(paddleTwo)) {
velocity.x *= -1;
velocity.y += getVelocityY(paddleTwo, radius);
position.x = getDisplayWidth() - paddleTwo.getWidth();
}

if (touchedWall(getDisplayHeight(), radius)) velocity.y *= -1;
}

canvas.drawCircle(position.x - radius, position.y, radius, paint);
if (gameover && (position.x + radius < 0 || position.x - radius > getDisplayWidth())) {
reset = true;
if (velocity.x < 0) onPointListener.playerTwo();
else onPointListener.playerOne();
}

if (position.x - radius < paddleOne.getWidth() - paddleOne.getThickness() ||
position.x + radius > getDisplayWidth() - paddleTwo.getWidth() + paddleTwo.getThickness())
gameover = true;
}



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
משה הלולן לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 11.6.13
4818 הודעות, 8 פידבק, 14 נקודות
   13:16   10.08.15   
אל הפורום  
  5. מה נגיד אתה לא מבין?  
בתגובה להודעה מספר 4
 
   לפעמים לא צריך להכיר 100% את כל הקוד ומה כל פונקציה קטנה עושה ואיך, מספיק להבין מה היא עושה מהשם שלה ולשחרר נגיד getDisplayWidth אתה מבין מה היא עושה, לא הייתי נכנס וחוקר איך בדיוק הם מחשבים את הגודל וכו', פשוט תבין את הזרימה הכללית, הקוד די מסביר את עצמו..
יש כאן פעולות מתמטיות שיותר קשה להבין מלהסכל על הקוד בלי להבין את ההגיון המתמטי של זה.. נגיד למה דווקא ככה הם בחרו לחשב את הvelocity


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
משה הלולן לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 11.6.13
4818 הודעות, 8 פידבק, 14 נקודות
   13:20   10.08.15   
אל הפורום  
  6. הוספה  
בתגובה להודעה מספר 5
 
   נגיד בקשר לvelocity אם הייתי רוצה להתחיל לחקור ולהבין את המתמטיקה הייתי מתחיל מגיגול נגיד game engine calculate velocity
ואז מגיע לזה http://gamedev.stackexchange.com/questions/14850/how-to-calculate-falling-and-accelerating-velocity
http://buildnewgames.com/gamephysics/


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TooBigToFail
חבר מתאריך 12.5.14
1917 הודעות, 1 פידבק, -2 נקודות
   13:23   10.08.15   
אל הפורום  
  9. נראה שמדובר שם על פיזיקה ברמת הרבה יותר מסובכת  
בתגובה להודעה מספר 6
 
   פה אנחנו מדברים בסה"כ על לשמור על הכדור בגבולות המסך בלי "כוח משיכה" וכל מיני משתנים שיסבכו את החיים. יש בסה"כ פוזיציה ומהירות, וזהו אלה 2 המשתנים בתוכנית. על פניו נשמע כמו משהו פשוט, אבל במשפטי התניה אני הולך לאיבוד


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TooBigToFail
חבר מתאריך 12.5.14
1917 הודעות, 1 פידבק, -2 נקודות
   13:20   10.08.15   
אל הפורום  
  7. הדוגמא למתודה של הרוחב שהבאת ברורה, אבל החישובים האחרים לא ברורים  
בתגובה להודעה מספר 5
 
   אולי יש פה איזו שיטה מסוימת שמוכרת בעולם התיכנות לחישוב המהירות ופשוט צריך להכיר אותה? כמו שיש אלגוריתמים של מיון שהם אוניברסלים ואפשר ללמוד אותם ממקומות אחרים ולאו דווקא מקוד ספציפי, אולי גם כאן יש עקרונות מסוימים שאפשר להכיר בדרך אחרת וככה ללמוד טוב יותר.

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
משה הלולן לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 11.6.13
4818 הודעות, 8 פידבק, 14 נקודות
   13:23   10.08.15   
אל הפורום  
  8. הבנתי פשוט הסברתי לך שאתה מתמקד במשהו שאתה לא זקוק לו..  
בתגובה להודעה מספר 7
 
   הרי לעקוב בזמן אמת אחרי הקוד לא יעזור לך להבין את המתמטיקה מאחורי מנוע משחק, גם בשבילי זה סינית, אני מניח שמשחק פונג זה די פשוט ועדיין צריך להכיר מונחים בסיסיים.
לפעמים גם אין הגיון וככה המתכנת בחר לחשב את זה פשוט


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TooBigToFail
חבר מתאריך 12.5.14
1917 הודעות, 1 פידבק, -2 נקודות
   13:25   10.08.15   
אל הפורום  
  10. אם הייתי רואה מתי בדיוק כל משפט התניה מחושב אולי זה כן היה עוזר  
בתגובה להודעה מספר 8
 
   ממה שניסיתי זה לא עזר... אבל בסה"כ השאלה העיקרית שלי היא איך כן להבין את הקוד הזה, ולא איך לעבור הלאה ולא להבין אותו


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
משה הלולן לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 11.6.13
4818 הודעות, 8 פידבק, 14 נקודות
   13:31   10.08.15   
אל הפורום  
  11. הסברתי לך, אני יתן לך עוד דוגמא שאני הייתי עושה  
בתגובה להודעה מספר 10
 
   אולי אחרים יענו כאן תשובות אחרות

שאלת ספציפית על הif הראשון
אני לא מכיר את java אבל בטח יש שם דרך לדיבאגינג כלשהו
נגיד:


if (velocity.x < 0
&& position.x - radius < paddleOne.getWidth()
&& touchedPaddle(paddleOne)) {
velocity.x *= -1;
velocity.y += getVelocityY(paddleOne, radius);
position.x = paddleOne.getWidth() + radius * 2;
} else {
log('first if else');
}

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TooBigToFail
חבר מתאריך 12.5.14
1917 הודעות, 1 פידבק, -2 נקודות
   13:34   10.08.15   
אל הפורום  
  12. רעיון מעניין! אפשר גם להדפיס משהו על המסך באמצע התניה מסוימת  
בתגובה להודעה מספר 11
 
   זאת אחלה דרך לתת אינדיקציה שקטע מסוים בקוד רץ! תודה אני אנסה את זה, ואני מקווה שאולי בכל זאת מישהו כאן כן מצליח להבין את הקוד או אולי לתת עוד הנחיה על איך כדאי לגשת לזה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TooBigToFail
חבר מתאריך 12.5.14
1917 הודעות, 1 פידבק, -2 נקודות
   14:27   10.08.15   
אל הפורום  
  17. אני מצליח להבין שההתניה הראשונה רצה כשהכדור פוגע במחבט העליון  
בתגובה להודעה מספר 12
 
   והשניה רצה כשהוא פוגע במחבט השני

מה שאני ממש לא מבין זה מה המתודה getVelocityY עושה
נמצאת כאן למטה:
https://github.com/Grarak/Pong-Android/blob/master/app/src/main/java/com/grarak/pong/Ball.java

מה פשר המערך הדו מימדי הזה ואיך הוא נכנס לתמונה?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
משה הלולן לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 11.6.13
4818 הודעות, 8 פידבק, 14 נקודות
   14:50   10.08.15   
אל הפורום  
  18. אני רק מנחש כי אין לי זמן לעבור על הקוד אבל  
בתגובה להודעה מספר 17
 
   אני מנחש שהם בנו את זה ככה שהכדור זז על ציר הx והy
נגיד יש לו מהירות 2 על ציר y ומהירות 1 על ציר x הוא בעצם כל tick יזוז 2 למעלה ו1 ימינה אז getVelocityY מחשב את המהירות של ציר הy כמה להזיז אותו בכל ריצה.

תעבור על זה באותה דרך שהראתי לך.. תראה שהם מחזירים שם 4,-4,2,-2,0 עכשיו תבדוק מה קורה שחוזר 0 מה הכדור עושה. ומה הוא עושה כשחוזר -4


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TooBigToFail
חבר מתאריך 12.5.14
1917 הודעות, 1 פידבק, -2 נקודות
   13:35   10.08.15   
אל הפורום  
  13. אגב הקוד המלא נמצא כאן:  
בתגובה להודעה מספר 0
 
   https://github.com/Grarak/Pong-Android/tree/master/app/src/main/java/com/grarak/pong


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net