Browsed by
חודש: ספטמבר 2016

Two Cars

Two Cars

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

בקצרה: libGDX היא ספרייה נוחה לשימוש עבור יצירת משחקי 2D. אפשר לראות בפוסט הנ״ל מדריך איך ליצור פרוייקט חדש ולהריץ אותו על פלטפורמות שונות.

ישנו משחק בשם Two Cars – צריך לשלוט בו זמנית על שתי מכוניות בלי להתנגש במכשולים. אני הולך ליצור גירסא שלו, עם שינוי קל. המשחק יראה בסופו של דבר ככה:

ezgif-2403319550

ניצור פרוייקט חדש בשם TwoCars. אין צורך ב- Box2D – לא נשתמש במנוע הפיזיקלי לצורך המשחק הזה.

נתחיל.

מבנה כללי

libGDX היא event-driven – כלומר האירועים השונים הם מה שמניעים אותנו. לדוגמא, בכל פעם שהמסך מתרפרש – תיקרא הפונקציה –

public void render(float delta)

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

ניצור package חדש בשם helpers, וניצור בו שתי מחלקות – GameWorld, GameRenderer.

GameWorld – בה תהיה הלוגיקה של המשחק. היא תחזיק את ה- State של המשחק, המיקום בו נמצא כל אובייקט על המסך, וניקוד.

GameRenderer – אחראי לצייר על המסך את כל המידע שיש ב- GameWorld.

GameWorld:

public class GameWorld {
    public void update(float delta) {
 
    }
}

GameRenderer:

public class GameRenderer {
    private OrthographicCamera cam;
    private GameWorld gameWorld;
 
    public GameRenderer(GameWorld world){
        this.gameWorld = world;
 
        cam = new OrthographicCamera();
        cam.setToOrtho(true, GameConstants.SCREEN_WIDTH, GameConstants.SCREEN_HEIGHT);
    }
 
    public void render(){
 
    }
}

זה המבנה הבסיסי שיחזור על עצמו בכל משחק. בכל פריים חדש, נקרא ל- GameWorld כדי לעדכן את המצב במשחק, ואז נקרא ל- GameRenderer לעדכן את מה שמוצג.

ב- GameRenderer גם מאתחלים את המצלמה – היא אחראית על איך יראה כל מה שמוצג. נרחיב על כך בהמשך.

Read More Read More

HyperTerm

HyperTerm

כתבתי כאן לאחרונה על Electron, הספרייה שבעזרתה אפשר לכתוב אפליקציות cross-platform ב- Node.js בקלות.

נתקלתי בפרוייקט מעניין שמשתמש באלקטרון – בשביל לכתוב טרמינל. זה נקרא HyperTerm.

מה שיפה בו, זה שהוא יפה. כלומר, זו בעצם שכבת UI ש״יושבת״ מעל הטרמינל הרגיל שמותקן אצלכם – ומכיוון שזה כתוב בשפות צד-לקוח (html/css/js) אפשר ברגע להתאים כל פרט קטן שייראה בדיוק איך שתרצו.

ישנם כל מיני תוספים נחמדים שכתבו עבורו (אפשר למצוא אותם אם מחפשים 'npm search hyperterm'). לדוגמא, תוסף שמאפשר לפתוח לינקים בתוך הטרמינל עצמו:

hyperlink

או תוסף שמוסיף ניצוצות (ופיצוצים..) בזמן ההקלדה:

hyperpower.gif

כרגע הפרוייקט נתמך ב- MacOS, ואמור לעבוד גם ב- Linux (עדיין לא ניסיתי).

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

אני מניח (ומקווה) שזה ילך ויתבסס יותר עם הזמן. יהיה מעניין לעקוב.

libGDX 101

libGDX 101

libGDX היא ספרייה ליצירת משחקים. כתוב את המשחק פעם אחת (Java) ותוכל להריץ אותו פחות או יותר בכל פלטפורמה אפשרית: Android, iOS, Windows, MacOS, Linux, Web Browsers וכן הלאה.

יש ל- libGDX כלים נוחים לעבודה, מנוע פיזיקלי, והכי חשוב – קהילת מפתחים (זו ספריית קוד פתוח). מה שמאפשר את התמיכה ב- cross platform, זה שהספרייה מבוססת על OpenGL – שקיימת עבור כל הפלטפורמות הנ״ל (בשביל לרוץ בדפדפן יש את המקבילה, WebGL).

בפוסט הזה אני רוצה להדגים איך ליצור פרוייקט חדש ולהריץ אותו באנדרואיד, desktop, iOS ודפדפן.

יצירת פרוייקט

כדי ליצור פרוייקט חדש, כל מה שצריך זה להוריד מכאן קובץ JAR. אחרי שנפעיל את הקובץ, זה מה שנראה:

screen-shot-2016-09-14-at-10-55-28-am

נמלא את השדות כך:

Name: libGDX101

Package: com.yair.libgdx101

Game Class: LibGDX101

בשורה של ה- sub-projects נשאיר את התיבות איך שהן.

בשורה של ה- extensions נבטל את הבחירה ב- Box2D, מכיוון שלא נשתמש בדוגמא במנוע הפיזיקלי אז זה לא רלבנטי.

אחרי הלחיצה על Generate יווצר לנו פרוייקט Gradle במקום בו בחרנו.

Read More Read More