Oop lab/gdx examples

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
หน้านี้เป็นส่วนหนึ่งของ Oop lab

เราจะดูโครงสร้างของเกมที่เขียนโดยใช้ไลบรารี GDX โดยพิจารณาจากสอง project

The plane

  • นี่เป็นเกม clone จาก Flappy bird
  • ลิงก์: github

ทดลองรัน

แก้ gradle config

ให้ clone project มาในเครื่อง เลือกไดเร็กทอรีที่เหมาะสม แล้วสั่ง

git clone https://github.com/badlogic/theplanethatcouldntflygood.git

เกมดังกล่าวถูกพัฒนาเพื่อให้ทำงานได้บน Android, iOS และบนเว็บ ในการคอมไพล์ (build) ถ้าจะสมบูรณ์ต้องมี Android SDK แต่เราจะสนใจเฉพาะ Desktop เท่านั้น ดังนั้นจะต้องไปแก้ config บางส่วนก่อน เนื่องจากเกมบน GDX จะ build ด้วย Gradle เราจะไปแก้ config ของ gradle ดังนี้

  • settings.gradle ลบ project อื่น ๆ ออก โดยตัดให้เหลือแค่ 'desktop' กับ 'core'
include 'desktop', 'core'
  • build.gradle ไล่ลบส่วนที่เขียนว่า project(":android") { ... }, project(":ios") {... }, และ project(":html") { ... }

import เข้า eclipse

เลือก Import > Gradle > Gradle Project

จากนั้นเลือก directory ที่เรา clone มา กดดูการนำเข้าและ build จนเสร็จ

รัน (และพัง)

ในการรัน จะต้องสั่งรันที่ class DesktopLauncher (อยู่ใน xxxx-desktop) แต่เมื่อรันแล้ว โปรแกรมจะ crash เพราะว่าค่าไดเร็กทรอรีไม่ถูกต้อง

ตั้งค่า config ตอนรัน

ถ้าเราสั่งรันเลย จะมีปัญหาว่าระบบจะหา asset ไม่เจอ ต้องไปตั้ง working directory เป็น android/assets เสียก่อน โดยดำเนินการดังนี้

เลือก Run > Run Configurations... > Java Application > เลือก DesktopLauncher ที่ต้องการ > เลือก tab Arguments > ส่วน Working directory

แล้วเลือก File Systems... จากนั้นเลือกไปที่ theplanethatcouldntflygood/android/assets

จัดเก็บและสั่งรันใหม่

โครงสร้างเกม

จะพบว่าเรามี project สองอัน คือ theplanethatcouldntflygood-core กับ theplanethatcouldntflygood-desktop โค้ดหลักจะอยู่ใน core

คลาส

  • มีคลาสหลักแค่คลาสเดียวคือ PlaneGame เป็น subclass ของ ApplicationAdapter ในนั้นมีคลาส Rock
  • เมท็อดสำคัญ
    • create
    • render
      • updateWorld
      • drawWorld
  • วัตถุประเภทต่าง ๆ จากไลบรารี
    • Rectangle
    • Vector2
    • Texture, TextureRegion
    • SpriteBatch, Animation
    • OrthographicCamera
    • BitmapFont
    • Music, Sound

Super Jumper

ทดลองรัน

  • clone project
  • แก้ gradle config
  • แก้ Run configurations...

โครงสร้างเกม

เกมนี้มีการสร้างคลาสที่หลากหลายขึ้น ให้จับคู่และลองไล่ดูว่าเกมประกอบไปด้วยวัตถุอะไรบ้างและทำงานประสานกันอย่างไร