libGDX เขียนเกม part 2: Kotlin ปะทะ Java Launchers

Phai Panda
3 min readJan 19, 2020

--

จำต้องเขียนตอนนี้เนื่องจากว่าทั้งสองภาษาได้มาบรรจบกัน มือใหม่มาเห็นจะได้ไม่งงจนพาลท้อแท้สิ้นหวังไปเสียก่อน (ทำไมผมขำ) เราจะพูดกันถึงพื้นฐานและทำความเข้าใจภาษาทั้งสองนี้เพื่อนำไปสู่หนทางเขียนเกมของเราต่อไป

มาเขียน Kotlin Launcher กันเถอะ

ความเดิม part ที่แล้ว

Kotlin vs Java Compiling

ใน part แรกผมพูดไปบ้างแล้ว ว่าทั้ง kotlin และ Java ต่างต้องการ JVM ลองมาดูภาพนี้กันครับ

https://www.manning.com/books/kotlin-in-action

จากภาพสิ่งที่เราต้องการก็คือ Application ซึ่งจะได้มาจากการทำงานของ JVM แต่ก่อนจะได้ Application มือใหม่พึงทราบว่า

  • Kotlin มีนามสกุลคือ .kt
  • ขณะที่ Java มีนามสกุลคือ .java
  • Kotlin ต้องใช้ Kotlin Compiler
  • ขณะที่ Java ต้องใช้ Java Compiler
  • ทั้ง Kotlin Compiler และ Java Compiler ต่างก็ให้ผลลัพธ์เป็น .class
  • .class นี้สามารถทำงานกับ JRE ได้เลย โดยที่ JRE ก็จะไปเรียก JVM ต่อไป
  • .class นี้สามารถห่อ ​​(pack) ให้เป็น .jar และ .jar นี้สามารถห่อ ​(pack) เป็น .war ได้
  • .jar ที่เกิดจากการห่อ .class ซึ่งเป็นผลจาก Kotlin Compiler จำต้องใส่ Kotlin Runtime เข้าไปด้วย มิเช่นนั้นจะแกะ .class มา execute ไม่สำเร็จ

อ้างอิง

กลับไปดูโครงสร้างโปรเจกต์ของเรากันครับ

Project Structure

โครงสร้าง project หลัง generate เสร็จ

เอาหลักๆก่อน

  • .gradle เกิดขึ้นจากผลการทำงานของโปรแกรม Gradle ไม่ต้องสนใจ
  • .idea เกิดขึ้นจากผลการทำงานของโปรแกรม IntelliJ IDEA ไม่ต้องสนใจ
  • core เราจะเขียนโปรแกรม (เกม) กันตรงนี้
  • desktop จำตอนแรกได้ไหมที่ให้เลือก Sub Projects คืออยากให้ export เกมของเราไปยัง platform ใดบ้าง เราเลือกแค่ desktop จึงปรากฏเท่านี้
  • gradle คือไฟล์ต่างๆของโปรแกรม Gradle เป็น Build Tool ที่ดูแลโปรเจกต์ของเรา
  • External Libraries คือไลบรารีที่เขียนอยู่ในไฟล์ build.gradle และถูกดาวน์โหลดมาจากอินเตอร์เน็ต (หากตรวจสอบแล้วว่าไม่มีอยู่ในเครื่องแต่แรก)

ทีนี้ไปดูโค้ดหลักๆที่สำคัญกันต่อ

Launchers & core

ครั้งแรกที่เรารันโปรแกรมขึ้นมาคือเปิดไฟล์ DesktopLauncher จากนั้นมองหาเมธอด main* แล้วกดปุ่มสามเหลี่ยมสีเขียว

รอคอยการ execute แล้วได้สิ่งนี้

ผมกำลังจะบอกว่า โค้ดทั้งหมดในไฟล์นี้คือภาษา Java

public class DesktopLauncher {
public static void main (String[] arg) {
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
new LwjglApplication(new Main(), config);
}
}

หากว่าใครเคยเรียนภาษา C มาก่อน ก็จะเข้าใจว่าโปรแกรมจะทำงานได้จำต้องมีฟังก์ชันชื่อ main ซึ่งเป็นฟังก์ชันแรกที่ตัว compiler จะมองหาเพื่อ execute โค้ด

ภาษา Java หรือ Kotlin ไม่ต่างกัน มันทั้งคู่ต้องการฟังก์ชัน main นี้เพื่อให้ compiler มา compile โค้ด

ภาษา ​Java จะเรียกฟังก์ชันว่าเมธอด (method) มือใหม่ขอให้เข้าใจว่าเป็นอันเดียวกันไปก่อนจะได้ไม่สับสนมาก และจะต้องเขียนเข้ารูปแบบนี้เท่านั้นตัว compiler จึงจะเข้าใจว่าเป็น main

public static void main (String[] arg) { }

สำหรับ Kotlin ก็คือ

fun main(args: Array<String>) { }

มาทดลองเขียนเมธอด main แบบ Kotlin แทนที่ Java ได้ดังนี้

คลิกขวาที่ package ชื่อ com.pros.desktop เลือก New > Kotlin File/Class

ตั้งชื่อคลาสนี้ว่า DesktopMain และเลือกประเภทเป็น File

จะได้ไฟล์ที่เขียนเพียง package ไว้ให้

package com.pros.desktop

เพิ่มเมธอด main ลงไป

package com.pros.desktop

fun main(args: Array<String>) {

}

จากนั้นประกาศตัวแปรชื่อ config ให้มีชนิดเป็น LwjglApplicationConfiguration เวลาพิมพ์ให้สังเกตว่า IntelliJ IDEA พยายามช่วยแนะนำชื่อคลาสให้เสมอ เลือกชื่อคลาสที่ต้องการได้เลยด้วยการใช้ลูกศรแล้วกด enter (มันจะ auto import ให้)

package com.pros.desktop

import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration

fun main(args: Array<String>) {
val config = LwjglApplicationConfiguration()

}

เราต้องการคลาส LwjglApplication เพื่อเรียกคลาส Main ซึ่งอยู่ใน folder ชื่อ core มาทำงาน

LwjglApplication ต้องการ auguments 2 ตัว ได้แก่คลาส Main และตัวแปร config ก็เป็นอันเรียบร้อย

package com.pros.desktop

import com.badlogic.gdx.backends.lwjgl.LwjglApplication
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration
import com.pros.Main

fun main(args: Array<String>) {
val config = LwjglApplicationConfiguration()
LwjglApplication(Main(), config)
}

เอาล่ะ มองไปมุมบนขวา ตรงที่มีรูปค้อนสีเขียวและเขียนว่า DesktopLauncher เราจะเปลี่ยนเป็นไฟล์ใหม่ที่เราเพิ่งสร้างขึ้น

กดตรงปุ่มลูกศรขี้ลงสีเทา เลือก Edit Configurations…

ที่ช่อง Main class เปลี่ยนเป็น DesktopMainKt กดปุ่ม Apply และ OK

รันโปรแกรมได้

ผลลัพธ์เดียวกัน

part นี้ไว้เท่านี้ก่อน เพื่อให้มือใหม่ได้ศึกษาและทำความเข้าใจโค้ด ความแตกต่างระหว่างโปรแกรมภาษา Java และ Kotlin เพราะโปรเจกต์เกมเรานี้สามารถเขียนทั้งสองภาษาผสมกันได้ อย่างไรก็ตามเราจะพยายามศึกษาและเขียนมันด้วย Kotlin นะครับ

ตั้งใจ หนทางของการเป็นเกมโปรแกรมเมอร์ไม่ได้ยากเย็นเกินไป!

อ่านต่อ

--

--

No responses yet