เขียนเกม Android เกมแรกของคุณโดยใช้ Corona SDK

ผู้เขียน: Randy Alexander
วันที่สร้าง: 1 เมษายน 2021
วันที่อัปเดต: 26 มิถุนายน 2024
Anonim
Writing your first Android game using the Corona SDK!
วิดีโอ: Writing your first Android game using the Corona SDK!

เนื้อหา


หมวดหมู่ยอดนิยมบน Google Play Store เป็นเกมเสมอ แม้ว่าเราทุกคนอาจใช้แอพพลิเคชั่นสำคัญ ๆ เช่นเว็บเบราว์เซอร์ไคลเอนต์อีเมลและแอพส่งข้อความด่วน แต่เกมก็ยังคงเป็นส่วนสำคัญของประสบการณ์มือถือ ดังนั้นจึงไม่แปลกใจที่หลาย ๆ คนที่ต้องการเรียนรู้ที่จะพัฒนาสำหรับ Android ต้องการเริ่มต้นด้วยการสร้างเกม นอกจากนี้ขอพูดอย่างตรงไปตรงมาการเขียนเกมนั้นสนุกกว่าการพัฒนาแอพเพิ่มประสิทธิภาพ!

ภาษาราชการของ Android คือ Java และสภาพแวดล้อมการพัฒนาอย่างเป็นทางการคือ Android Studio หากคุณต้องการตรวจสอบ Java แล้วฉันขอแนะนำการสอน Java พื้นฐานของเราและถ้าคุณต้องการเรียนรู้วิธีเขียนแอปโดยใช้ Android Studio ฉันขอแนะนำให้คุณตรวจสอบการสอนเกี่ยวกับการเขียนแอป Android เครื่องแรกของคุณ อย่างไรก็ตามสตูดิโอ Java และ Android ไม่ใช่วิธีเดียวในการพัฒนาสำหรับ Android คุณสามารถค้นหาภาพรวมของภาษาและ SDK ที่มีอยู่ในคำแนะนำของเรา: ฉันต้องการพัฒนาแอพ Android - ฉันควรเรียนรู้ภาษาใด

หนึ่งใน SDK ที่กล่าวถึงในคู่มือภาษาการเขียนโปรแกรมคือ Corona ซึ่งเป็น SDK บุคคลที่สามที่ออกแบบมาเพื่อการเขียนเกมเป็นหลัก Corona ใช้ Java แทน Lua ซึ่งเป็นภาษาสคริปต์ที่รวดเร็วซึ่งง่ายต่อการเรียนรู้และทรงพลัง อย่างไรก็ตาม Corona ไม่ใช่ SDK เกมบนมือถือเพียงตัวเดียวที่ใช้ Lua ตัวอย่างที่รู้จักกันดี ได้แก่ Cocos2d-X, Marmalade และ Gideros


ดาวน์โหลดและติดตั้ง

ในการเริ่มต้นกับ Corona คุณจะต้องดาวน์โหลดและติดตั้ง SDK ไปที่เว็บไซต์ Corona และกดปุ่มดาวน์โหลด คุณจะต้องสร้างบัญชี (ซึ่งฟรี) ก่อนจึงจะสามารถดาวน์โหลดชุดได้ หากคุณต้องการสร้างไฟล์. apk จริงแทนที่จะแค่เรียกใช้โปรแกรมของคุณในโปรแกรมจำลองคุณจะต้องติดตั้ง Java 7 แต่คุณไม่จำเป็นต้องติดตั้ง Android SDK ในการติดตั้ง Java 7 Development Kit ให้ไปที่เว็บไซต์ของ Oracle ให้ค้นหาส่วนที่เรียกว่า "Java SE Development Kit 7u79" และดาวน์โหลดเวอร์ชันสำหรับพีซีของคุณ

เมื่อคุณติดตั้ง Corona แล้วคุณจะต้องเปิดใช้งาน นี่เป็นกระบวนการแบบครั้งเดียวซึ่งฟรี เริ่ม Corona Simulator และตกลงกับใบอนุญาต ป้อนที่อยู่อีเมลและรหัสผ่านที่คุณใช้ในการดาวน์โหลดและคลิกเข้าสู่ระบบ

เริ่มต้นโครงการ

จากภายในตัวจำลอง Corona คลิกที่“ โครงการใหม่” ป้อนชื่อแอปของคุณในฟิลด์“ ชื่อแอปพลิเคชัน:” และปล่อยให้การตั้งค่าที่เหลือเป็นค่าเริ่มต้น คลิก“ ตกลง”


หน้าต่างทั้งสามจะปรากฏขึ้น สองอันแรกคือ Corona Simulator และ Corona Simular Output Corona จะเปิดหน้าต่าง File explorer เพื่อแสดงไฟล์สำหรับโครงการของคุณ

ไฟล์ส่วนใหญ่ (บาง 23 ไฟล์) ในไดเรกทอรีโครงการใช้สำหรับไอคอนแอปพลิเคชัน! ไฟล์ที่สำคัญที่สุดสำหรับเราตอนนี้คือ main.luaเพราะนี่คือที่ที่เราจะเขียนรหัสสำหรับแอพของเรา

Lua เบื้องต้น

ก่อนที่เราจะเขียนโค้ดเราต้องทำการท่องเที่ยวแบบหยุดเสียงของลัวะ ล่าม Lua (จำไว้ว่านี่เป็นภาษาสคริปต์ไม่ใช่ภาษาที่คอมไพล์แล้ว) สำหรับ Windows, OS X และ Linux อย่างไรก็ตามมันถูกติดตั้งไว้ใน Corona ดังนั้นในเวลานี้คุณไม่จำเป็นต้องติดตั้งอะไรเพิ่มเติม วิธีที่ง่ายที่สุดในการเล่นกับ Lua คือการใช้การสาธิตออนไลน์แบบออนไลน์

คุณสามารถหาบทเรียนที่ดีมากมายเกี่ยวกับ Lua ออนไลน์และคุณควรดูที่คู่มืออ้างอิง Lua การเขียนโปรแกรมใน Lua, The.Lua.Tutorial และ The Tutorials Point Lua Tutorial

นี่คือโปรแกรม Lua ขนาดเล็กที่จะแสดงคุณสมบัติที่สำคัญบางประการของ Lua:

ฟังก์ชั่นท้องถิ่น doubleIt (x) กลับ x * 2 สิ้นสุดสำหรับ i = 1,10,1 ทำ x = doubleIt (i) ถ้า (x == 10) จากนั้นพิมพ์ ("สิบ") อื่นพิมพ์ (end double (i))

รหัสข้างต้นแสดงให้เห็นถึงการสร้าง Lua สำคัญสามประการ: ฟังก์ชั่น, ลูป, และ if statement ฟังก์ชั่น doubleIt () ง่ายมากเพียงแค่เพิ่มค่าพารามิเตอร์ที่ส่งเป็นสองเท่า x.

รหัสหลักคือ สำหรับ วนซ้ำตั้งแต่ 1 ถึง 10 เรียกว่า doubleIt () สำหรับการทำซ้ำแต่ละครั้ง หากค่าส่งคืนคือ 10 (เช่นเมื่อใด ผม คือ 5) จากนั้นโค้ดจะพิมพ์“ สิบ” มิฉะนั้นจะพิมพ์ผลลัพธ์ออกมา doubleIt ().

หากคุณมีประสบการณ์การเขียนโปรแกรมโค้ดตัวอย่างควรจะง่ายต่อการติดตาม หากคุณต้องการเรียนรู้การเขียนโปรแกรมพื้นฐานบางอย่างฉันขอแนะนำให้คุณใช้แหล่งข้อมูลที่เชื่อมโยงข้างต้นเพื่อฝึกฝนทักษะของคุณ

กำลังเขียนเกม

การเขียนโปรแกรมพื้นฐานใน Corona นั้นง่ายมาก คุณต้องการเพียงแค่ความกังวลเกี่ยวกับตัวคุณเองด้วยไฟล์เดียว main.lua, และให้โคโรนายกของหนักทั้งหมด เกมที่เรากำลังจะเขียนเป็นเกม "tap" ที่เรียบง่าย บอลลูนหรือระเบิดจะล้มเหลวบนหน้าจอ หากผู้เล่นแตะที่บอลลูนที่พวกเขาทำคะแนนให้พวกเขาแตะที่ระเบิดแล้วคะแนนจะถูกหารด้วย 2 เพื่อเป็นการลงโทษ ในการเขียนรหัสที่คุณต้องแก้ไข main.lua. คุณสามารถทำได้ในโปรแกรมแก้ไขข้อความใด ๆ

Corona SDK มีเอ็นจิ้นฟิสิกส์ 2D ในตัวซึ่งทำให้การสร้างเกมเป็นเรื่องง่ายมาก ขั้นตอนแรกในการเขียนเกมคือการเริ่มต้นเครื่องมือฟิสิกส์:

ฟิสิกส์ท้องถิ่น = ต้องการ ("ฟิสิกส์") physics.start ()

รหัสค่อนข้างอธิบายตนเอง โหลดโมดูลฟิสิกส์และเริ่มต้นมันถูกกำหนดให้กับตัวแปร ฟิสิกส์. เพื่อเปิดใช้งานเครื่องยนต์physics.start () ถูกเรียก.

ต่อไปเราจะสร้างตัวแปรที่มีประโยชน์ซึ่งจะมีประโยชน์ไม่เพียง แต่สำหรับเกมง่ายๆนี้ แต่สำหรับเกมที่ซับซ้อนมากขึ้น halfW และ halfH เก็บค่าครึ่งหนึ่งของความกว้างของหน้าจอและครึ่งหนึ่งของความสูงของหน้าจอ:

halfW = display.contentWidth * 0.5 halfH = display.contentHeight * 0.5

แสดง วัตถุเป็นวัตถุที่กำหนดไว้ล่วงหน้าซึ่ง Corona ทำให้ใช้ได้ทั่วโลก

มาถึงขั้นตอนแรกที่ทำให้บางสิ่งบางอย่างเกิดขึ้นจริงบนหน้าจอ:

โลคัล bkg = display.newImage ("night_sky.png", halfW, halfH)

เช่นเดียวกับคุณสมบัติเช่น contentHeight และ contentWidth, แสดง วัตถุยังมีฟังก์ชั่นที่มีประโยชน์มากมาย newImage () ฟังก์ชั่นอ่านไฟล์ภาพ (ในกรณีนี้คือ. png) และแสดงบนหน้าจอ วัตถุแสดงผลจะแสดงเป็นเลเยอร์ดังนั้นเนื่องจากนี่เป็นภาพแรกที่เราวางบนหน้าจอดังนั้นมันจะเป็นพื้นหลังเสมอ (เว้นแต่รหัสจะทำสิ่งที่จะเปลี่ยนอย่างชัดเจน) พารามิเตอร์ halfW และ halfH บอก Corona ให้วางภาพไว้ตรงกลาง

ณ จุดนี้คุณสามารถเรียกใช้รหัสในโปรแกรมจำลองและดูภาพพื้นหลัง หากคุณบันทึกไฟล์ตัวจำลองจะสังเกตว่าไฟล์นั้นมีการเปลี่ยนแปลงและเสนอให้เปิดใหม่ หากไม่เกิดขึ้นให้ใช้ไฟล์ -> เปิดใหม่

เนื่องจากผู้ใช้จะทำคะแนนให้กับการแตะลูกโป่งเราต้องเริ่มต้นตัวแปรคะแนนและแสดงคะแนนบนหน้าจอ:

คะแนน = 0 scoreText = display.newText (คะแนน, ครึ่ง W, 10)

คะแนนจะถูกเก็บไว้ในตัวแปรชื่อจินตนาการ คะแนน,และ scoreText เป็นวัตถุที่แสดงคะแนน ชอบ newImage (), newText () ใส่บางสิ่งบางอย่างบนหน้าจอในข้อความกรณีนี้ ตั้งแต่ scoreText เป็นตัวแปรทั่วโลกจากนั้นเราสามารถเปลี่ยนข้อความได้ทุกเมื่อ แต่เราจะไปถึงในไม่ช้า

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

ซ้าย: เพียงพื้นหลัง ขวา: ความเป็นมาและคะแนน

ตอนนี้มีบางสิ่งที่ยุ่งยากมากกว่า แต่ไม่ต้องกังวลฉันจะอธิบายทีละบรรทัด:

ฟังก์ชั่นท้องถิ่น balloonTouched (เหตุการณ์) ถ้า (event.phase == "เริ่ม") แล้วรันไทม์: removeEventListener ("enterFrame", event.elf) event.target:removeSelf () คะแนน = คะแนน + 1 scoreText.text = คะแนนสิ้นสุด

รหัสข้างต้นกำหนดฟังก์ชั่นที่เรียกว่า balloonTouched () ซึ่งจะถูกเรียกทุกครั้งที่มีการเคาะบอลลูน เรายังไม่ได้บอก Corona ให้เรียกใช้ฟังก์ชันนี้ทุกครั้งที่มีการเคาะบอลลูนซึ่งจะมาภายหลัง แต่เมื่อเราทำเช่นนี้เป็นฟังก์ชันที่ได้รับการเรียก

แตะหรือแตะกิจกรรมมีหลายขั้นตอนหลายขั้นตอนเพื่อรองรับการลาก ผู้ใช้วางนิ้วลงบนวัตถุนี่คือเฟส“ เริ่ม” หากพวกเขาเลื่อนนิ้วของพวกเขาไปในทิศทางใดนั่นคือเฟส“ ขยับ” เมื่อผู้ใช้ยกนิ้วจากหน้าจอนั่นคือเฟส "สิ้นสุด"

บรรทัดแรกของ balloonTouched () ตรวจสอบเราอยู่ในช่วง "เริ่ม" เราต้องการลบบอลลูนและเพิ่มคะแนนทันทีที่ posible ถ้าฟังก์ชั่นนั้นถูกเรียกอีกครั้งสำหรับเฟสอื่น ๆ เช่น“ สิ้นสุด” ฟังก์ชันจะไม่ทำอะไรเลย

ข้างในถ้า คำสั่งเป็นรหัสสี่บรรทัด มาจัดการกับสองคนแรกก่อนเพราะมันง่ายกว่าคะแนน = คะแนน + 1 เพียงแค่เพิ่มคะแนนโดยหนึ่งและscoreText.text = score เปลี่ยนข้อความคะแนนบนหน้าจอเพื่อสะท้อนถึงคะแนนใหม่ จำไว้ว่าฉันพูดอย่างนั้นscoreText เป็นสากลและสามารถเข้าถึงได้ทุกที่นั่นคือสิ่งที่เราทำที่นี่

ทีนี้สำหรับสองบรรทัดแรก เมื่อบอลลูนหรือระเบิดตกลงมาที่ด้านล่างของหน้าจอมันยังคงมีอยู่ในหน่วยความจำของแอปเป็นเพียงที่คุณไม่สามารถมองเห็นได้ เมื่อเกมดำเนินไปเรื่อย ๆ จำนวนของวัตถุที่อยู่นอกจอเหล่านี้จะเพิ่มขึ้นอย่างต่อเนื่อง ดังนั้นเราจำเป็นต้องมีกลไกที่จะลบวัตถุเมื่อพวกเขาไม่อยู่ในสายตา เราทำสิ่งนั้นในฟังก์ชั่นที่เรียกว่าปิดหน้าจอซึ่งเรายังไม่ได้เขียน ฟังก์ชั่นนั้นจะถูกเรียกหนึ่งครั้งต่อเฟรมระหว่างเกม เมื่อมีการแตะบอลลูนแล้วเราจำเป็นต้องลบออกและลบการโทรที่ตรวจสอบว่าบอลลูนหายไปหรือไม่

เส้นevent.target:removeSelf () ลบบอลลูน เมื่อเหตุการณ์การสัมผัสเกิดขึ้นหนึ่งในพารามิเตอร์ของฟังก์ชั่นฟังคือเหตุการณ์ พารามิเตอร์. มันบอกฟังก์ชั่นเกี่ยวกับกิจกรรมและประเภทของกิจกรรมเช่นevent.phase นอกจากนี้ยังบอกเราว่าบอลลูนใดถูกแตะevent.target removeSelf () ฟังก์ชั่นทำในสิ่งที่มันบอกว่ามันทำมันจะลบวัตถุ (ในกรณีนี้บอลลูน)

บรรทัดก่อนหน้านั้นจะลบฟัง "enterframe" ซึ่งเป็นฟังก์ชั่นที่เรียกว่าทุกเฟรมเพื่อดูว่าบอลลูนหลุดออกจากด้านล่างของหน้าจอหรือไม่ เราจะดูรายละเอียดเพิ่มเติมเมื่อเรามาเขียนปิดหน้าจอ ฟังก์ชั่นฟัง

ดังนั้นเพื่อสรุปballoonTouched ()ตรวจสอบว่านี่เป็นจุดเริ่มต้นของลำดับการสัมผัส จากนั้นจะลบฟัง "enterframe" ซึ่งเป็นฟังก์ชั่นที่เรียกว่าทุกเฟรมเพื่อดูว่าบอลลูนตกลงมาจากด้านล่างของหน้าจอหรือไม่ จากนั้นจะลบบอลลูนเพิ่มคะแนนและแสดงคะแนนใหม่

นั่นคือลูกโป่งตอนนี้เราต้องการบางสิ่งที่คล้ายกันสำหรับระเบิด:

ฟังก์ชันท้องถิ่น bombTouched (เหตุการณ์) ถ้า (event.phase == "เริ่ม") จากนั้นรันไทม์: removeEventListener ("enterFrame", event.elf) event.target:removeSelf () คะแนน = math.floor (คะแนน * 0.5) scoreText.text = จุดสิ้นสุดของคะแนน

เมื่อคุณเห็นรหัสคล้ายกันมากกับข้อยกเว้นที่แทนที่จะเพิ่มคะแนนคะแนนจะถูกคูณด้วย 0.5 (เช่นหารด้วย 2) Math.Floor () ฟังก์ชันปัดเศษคะแนนเป็นจำนวนเต็มที่ใกล้ที่สุด ดังนั้นหากผู้เล่นมีคะแนน 3 และเคาะระเบิดแล้วคะแนนใหม่จะเป็น 1 และไม่ใช่ 1.5

ฉันพูดถึง ปิดหน้าจอ () ฟังก์ชั่นก่อนหน้า ฟังก์ชั่นนี้จะถูกเรียกใช้ทุกเฟรมเพื่อตรวจสอบว่าวัตถุหลุดออกจากหน้าจอหรือไม่ นี่คือรหัส:

ฟังก์ชั่นท้องถิ่น offscreen (ตนเองเหตุการณ์) ถ้า (self.y == ศูนย์) แล้วกลับมาสิ้นสุดถ้า (self.y> display.contentHeight + 50) จากนั้นรันไทม์: removeEventListener ("enterFrame" ตนเอง) ตนเอง: removeSelf () สิ้นสุด

ในการคำนวณมีสถานการณ์ที่เรียกว่าสภาพการแข่งขัน นี่คือสิ่งที่จะเกิดขึ้นสองสิ่ง แต่สิ่งหนึ่งอาจเกิดขึ้นก่อนหรือบางครั้งสิ่งอื่นอาจเกิดขึ้นก่อน มันคือการแข่งขัน เงื่อนไขการแข่งขันบางอย่างจะมองไม่เห็นเพราะสิ่งหนึ่งดูเหมือนจะเกิดขึ้นก่อนเสมอ แต่พวกเขาสามารถทำให้เกิดข้อบกพร่องที่น่าสนใจในวันนั้นภายใต้เงื่อนไขที่เหมาะสมสิ่งอื่น ๆ ที่เกิดขึ้นก่อนแล้วจึงแบ่งระบบ!

มีสภาพการแข่งขันในเกมง่ายๆนี้เพราะสองสิ่งสามารถเกิดขึ้นได้ใกล้กัน: บอลลูนที่ถูกแตะและ ปิดหน้าจอ () ฟังก์ชันถูกเรียกเพื่อดูว่าบอลลูนหายไปจากหน้าจอหรือไม่ ผลที่ได้คือรหัสที่จะลบบอลลูนสามารถเรียกได้และจากนั้น ปิดหน้าจอ () ฟังก์ชั่นเรียกว่า (ซึ่งเกิดขึ้นเช่น 30 ครั้งต่อวินาที) เพื่อหลีกเลี่ยงเหตุการณ์แปลก ๆ นี้ ปิดหน้าจอ () ฟังก์ชั่นต้องตรวจสอบว่า Y ค่าของวัตถุคือ ศูนย์ (null) หรือไม่ ถ้ามันเป็น ศูนย์ หมายความว่าวัตถุนั้นถูกลบไปแล้วดังนั้นไปเลยสิ่งเหล่านี้ไม่ใช่หุ่นที่เรากำลังมองหา

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

หลักฐานทั้งหมดของเกมนี้คือลูกโป่งหรือระเบิดใหม่จะยังคงหล่นลงมาที่หน้าจอ ดังนั้นเราต้องการฟังก์ชั่นที่จะสร้างบอลลูนใหม่หรือระเบิดใหม่:

ฟังก์ชั่นท้องถิ่น addNewBalloonOrBomb () ท้องถิ่น startX = math.random (display.contentWidth * 0.1, display.contentWidth * 0.9) ถ้า (math.random (1,5) == 1) จากนั้น - BOMB! ระเบิดท้องถิ่น = display.newImage ("bomb.png", startX, -300) physics.addBody (bomb) bomb.enterFrame = offscreen รันไทม์: addEventListener ("enterFrame", ระเบิด) ระเบิด: addEventListener ("สัมผัส", ระเบิดแตะ) อื่น - บอลลูนท้องถิ่นบอลลูน = display.newImage ("red_balloon.png", startX, -300) physics.addBody (บอลลูน) balloon.enterFrame = offscreen รันไทม์: addEventListener ("enterFrame", บอลลูน) บอลลูน: addEventListener ("สัมผัส", balloonTouched) สิ้นสุด

บรรทัดแรกของฟังก์ชั่นตัดสินใจที่บอลลูนจะลดลงจากบน x เครื่องบิน. หากบอลลูนหรือลูกระเบิดตกตรงกลางนั่นจะไม่น่าสนใจมาก! ดังนั้นstartx เป็นตัวเลขสุ่มระหว่างร้อยละ 10 ถึงร้อยละ 90 ของความกว้างหน้าจอ

ถัดไปหมายเลขสุ่มจะถูกเลือกระหว่าง 1 และ 5หากตัวเลขเป็น 1 การวางระเบิดจะลดลง ถ้ามันเป็น 2, 3, 4 หรือ 5 บอลลูนจะลดลง ซึ่งหมายความว่าการวางระเบิดจะลดลงประมาณร้อยละ 20 ของเวลา

รหัสวางระเบิดและบอลลูนค่อนข้างคล้ายคลึงกัน ภาพแรก (ระเบิดหรือบอลลูน) จะแสดงโดยใช้newImage(). ของมัน x ตำแหน่งคือstartx ในขณะที่มัน Y ตำแหน่งถูกตั้งค่าเป็น -300 เช่นด้านบนของหน้าจอ เหตุผลก็คือเราต้องการให้วัตถุหล่นจากด้านนอกพื้นที่หน้าจอไปยังพื้นที่ที่มองเห็นแล้วจากด้านล่าง เนื่องจากเราใช้เอนจิ้นฟิสิกส์ 2D มันเป็นการดีที่จะให้วัตถุระยะทางเริ่มต้นลดลงดังนั้นมันจึงสามารถเพิ่มความเร็วได้

การโทรไปphysics.addBody () นำภาพที่โหลดโดย newImage () และเปลี่ยนเป็นวัตถุในเอนจินฟิสิกส์ มันมีพลังมาก ไฟล์รูปภาพใด ๆ สามารถสร้างเป็นเนื้อหาที่ตอบสนองต่อแรงโน้มถ่วงและการชนเพียงแค่โทรหาphysics.addBody ()

สามบรรทัดสุดท้ายของระเบิดหรือรหัสบอลลูนตั้งค่าผู้ฟัง การตั้งค่าenterFrame คุณสมบัติจะบอก Corona ว่าฟังก์ชันใดที่จะเรียกใช้ทุกเฟรมและการเรียกRuntime: addEventListener () ตั้งขึ้น สุดท้ายเรียกร้องให้บอลลูน: addEventListener () บอก Corona ว่าฟังก์ชั่นใดในการโทรหากสัมผัสกับระเบิดหรือบอลลูน

และตอนนี้เกมก็เกือบจะเสร็จสมบูรณ์แล้ว เราต้องการโค้ดอีกสองบรรทัด:

addNewBalloonOrBomb () จับเวลาเพิ่มรูปแบบด้วย Delay (500, เพิ่ม newBalloonOrBomb, 0)

บรรทัดแรกทำให้การวางระเบิดครั้งแรกหรือบอลลูนตกลงมาโดยการเรียกอย่างชัดเจนaddNewBalloonOrBomb (). บรรทัดที่สองตั้งค่าตัวจับเวลาที่จะเรียกaddNewBalloonOrBomb () ทุกครึ่งวินาที (500 มิลลิวินาที) ซึ่งหมายความว่าบอลลูนหรือระเบิดใหม่จะตกลงทุกครึ่งวินาที

ตอนนี้คุณสามารถรันเกมในโปรแกรมจำลอง

นี่คือรายการที่สมบูรณ์สำหรับ main.lua รหัสโครงการที่สมบูรณ์สำหรับเกมนี้สามารถพบได้ที่นี่ใน GitHub

-------------------------------------------------- --------------------------------------- - - เกมล้มบอลลูนและระเบิด - เขียนโดย Gary Sims สำหรับ - ------------------------------------------- ---------------------------------------------- - เริ่มต้น เครื่องยนต์ฟิสิกส์ฟิสิกส์ท้องถิ่น = ต้องการ ("ฟิสิกส์") physics.start () - คำนวณครึ่งความกว้างของหน้าจอและความสูงครึ่งหนึ่ง = display.contentWidth * 0.5 halfH = display.contentHeight * 0.5 - ตั้งพื้นหลังท้องถิ่น bkg = display.newImage ("night_sky.png", halfW, halfH) - คะแนนคะแนน = 0 scoreText = display.newText (คะแนนครึ่ง, 10) - เรียกว่าเมื่อผู้เล่นแตะที่บอลลูน - เพิ่มคะแนน 1 ฟังก์ชันบอลลูนท้องถิ่นแตะ ( เหตุการณ์) ถ้าหาก (event.phase == "เริ่มต้น") จากนั้นรันไทม์: removeEventListener ("enterFrame", event.elf) event.target:removeSelf () คะแนน = คะแนน + 1 scoreText.text = ปลายจบคะแนน - เรียกว่าเมื่อ ระเบิดถูกผู้เล่นเคาะ - ครึ่งคะแนนเป็นฟังก์ชั่นการลงโทษลูกระเบิดท้องถิ่นแตะต้อง (เหตุการณ์) ถ้า (event.phase == "เริ่มต้น") จากนั้นรันไทม์: removeEventListener ("enterFrame", event.elf) event.target:removeSelf () คะแนน = math.floor (คะแนน * 0.5) scoreText.text = คะแนนสิ้นสุดท้าย - ลบวัตถุที่หลุดออกจาก ด้านล่างของหน้าจอฟังก์ชั่นในท้องถิ่น offscreen (ตนเองเหตุการณ์) ถ้า (self.y == ศูนย์) แล้วกลับมาสิ้นสุดถ้า (self.y> display.contentHeight + 50) จากนั้นรันไทม์: removeEventListener ("enterFrame" ตนเอง): removeSelf () end end - เพิ่มบอลลูนที่ตกลงมาใหม่หรือฟังก์ชั่นการระเบิดในท้องถิ่น addNewBalloonOrBomb () - คุณสามารถค้นหา red_ballon.png และ bomb.png ใน GitHub repo local startX = math.random (display.contentWidth * 0.1, display.contentWidth * 0.9) ถ้า (math.random (1,5) == 1) ดังนั้น - BOMB! ระเบิดท้องถิ่น = display.newImage ("bomb.png", startX, -300) physics.addBody (bomb) bomb.enterFrame = offscreen รันไทม์: addEventListener ("enterFrame", ระเบิด) ระเบิด: addEventListener ("สัมผัส", ระเบิดแตะ) อื่น - บอลลูนท้องถิ่นบอลลูน = display.newImage ("red_balloon.png", startX, -300) physics.addBody (บอลลูน) balloon.enterFrame = ออฟไลน์รันไทม์: addEventListener ("enterFrame", บอลลูน) บอลลูน: addEventListener ("touch", สิ้นสุดบอลลูนแตะที่ส่วนท้าย - เพิ่มบอลลูนหรือลูกระเบิดใหม่ในขณะนี้เพิ่ม NEWBalloonOrBomb () - เพิ่มบอลลูนหรือลูกระเบิดใหม่ทุก ๆ 0.5 วินาทีจับเวลาต่อรูปแบบเมื่อวันที่ 500 (เพิ่ม AddBalloonOrBomb, 0)

ขั้นตอนถัดไป

ขั้นตอนต่อไปคือการเล่นเกมบนอุปกรณ์ Android จริง หากต้องการสร้างไฟล์. apk ให้คลิกที่ไฟล์ -> สร้างสำหรับ Android ... และกรอกฟิลด์ ผลลัพธ์จะเป็นไฟล์. apk ซึ่งคุณสามารถคัดลอกไปยังอุปกรณ์ของคุณแล้วติดตั้ง คุณจะต้องตรวจสอบให้แน่ใจว่าคุณได้กำหนดค่าอุปกรณ์ของคุณเพื่ออนุญาตให้ติดตั้งแอพจากแหล่งที่ไม่รู้จัก Amazon มีเอกสารที่ดีเกี่ยวกับเรื่องนี้ในขณะที่คุณต้องตั้งค่านี้เพื่อติดตั้ง Amazon Appstore Corona ยังมีคำแนะนำเกี่ยวกับวิธีลงชื่อสร้างและทดสอบแอปของคุณบนอุปกรณ์ Android

เมื่อติดตั้งเกมบนอุปกรณ์ของคุณเรียบร้อยแล้วสิ่งต่อไปที่ต้องทำคือปรับปรุงเกม ตัวอย่างเช่นทำไมไม่ลองเพิ่ม "ป๊อป" หรือ "ปัง" เสียงทุกอย่างที่บอลลูนหรือระเบิดถูกเคาะ Corona มี API สำหรับสิ่งต่อไปนี้:media.playEventSound ().

หรือทำไมไม่ลองเพิ่มวัตถุประเภทที่สามพูดเพิ่มพิเศษที่เพิ่มคะแนนปัจจุบันสองเท่าหรือเพลงแบ็คกราวนด์ล่ะ?

สรุป

การเขียนเกมกับ Corona ค่อนข้างตรงไปตรงมาเนื่องจาก SDK จัดการกับสิ่งต่าง ๆ เช่น OpenGL และมีเอ็นจิ้นฟิสิกส์ 2D ในตัว นอกจากนี้ Lua ยังง่ายต่อการเรียนรู้และไม่ยากสำหรับทุกคนที่มีประสบการณ์การเขียนโปรแกรมขั้นต่ำ เว็บไซต์ Coronalabs มีเอกสารจำนวนมากรวมถึงคู่มือและบทแนะนำมากมาย

ในโค้ดน้อยกว่า 100 บรรทัดเรามีเกมที่ใช้งานได้ ตกลงมันจะไม่ชนะรางวัลใด ๆ อย่างไรก็ตามมันแสดงให้เห็นถึงพลังและความยืดหยุ่นของ Corona SDK

ทุกคนต่างก็อยากที่จะทาสี Harmony O ในฐานะที่เป็น "แผน B" ของ Huawei ที่สร้างขึ้นสำหรับธุรกิจสมาร์ทโฟน ในขณะนี้ยังไม่มีความลับใด ๆ ที่เว็บที่ซับซ้อนเกี่ยวกับการสะกดคำด้วยวาจาทางภูมิศาสตร์ทางก...

หัวเว่ยเป็นหนึ่งในผู้ผลิตสมาร์ทโฟนเพียงไม่กี่รายที่ผลิตชิปเซ็ตของตัวเองส่วนใหญ่ด้วยหน่วยการออกแบบ Hiilicon ของตัวประมวลผลหลายล้านตัว แต่เห็นได้ชัดว่าแบรนด์ดังกล่าวตั้งขึ้นเพื่อนำเสนอซิลิกอนภายในองค์กร...

ตัวเลือกของบรรณาธิการ