ผลต่างระหว่างรุ่นของ "01204223/kivy"
Jittat (คุย | มีส่วนร่วม) |
Jittat (คุย | มีส่วนร่วม) |
||
| แถว 89: | แถว 89: | ||
=== 1. การปรับสถานะเกม === | === 1. การปรับสถานะเกม === | ||
| − | |||
เกมทั่วไปที่มีการเคลื่อนไหวจะมีการเปลี่ยนตำแหน่งวัตถุต่าง ๆ ตลอดเวลา ในการเขียนโปรแกรมจริง ๆ นั้น เราไม่สามารถปรับตำแหน่งตลอดเวลาได้ แต่เราจะใช้การตั้งเวลาให้ระบบเรียกฟังก์ชันในการปรับตำแหน่งของเราเป็นระยะ | เกมทั่วไปที่มีการเคลื่อนไหวจะมีการเปลี่ยนตำแหน่งวัตถุต่าง ๆ ตลอดเวลา ในการเขียนโปรแกรมจริง ๆ นั้น เราไม่สามารถปรับตำแหน่งตลอดเวลาได้ แต่เราจะใช้การตั้งเวลาให้ระบบเรียกฟังก์ชันในการปรับตำแหน่งของเราเป็นระยะ | ||
| แถว 118: | แถว 117: | ||
โปรแกรมดังกล่าวเมื่อเรียกให้ทำงาน จะไม่เห็นผลลัพธ์เปลี่ยนแปลงใด ๆ เพราะว่าเรายังไม่ได้ทำงานอะไรเลยในเมท็อด update | โปรแกรมดังกล่าวเมื่อเรียกให้ทำงาน จะไม่เห็นผลลัพธ์เปลี่ยนแปลงใด ๆ เพราะว่าเรายังไม่ได้ทำงานอะไรเลยในเมท็อด update | ||
| + | |||
| + | === 2. ทำให้ PongGame รู้จักวัตถุ PongBall: properties และการกำหนด id === | ||
รุ่นแก้ไขเมื่อ 00:30, 15 กรกฎาคม 2556
เอกสารส่วนนี้ดัดแปลงมาจาก Pong Game Tutorial
เนื้อหา
ติดตั้ง kivy
การติดตั้ง สั่งคำสั่งต่อไปนี้ใน shell (อย่าลืม login เครือข่ายนนทรีก่อน)
sudo apt-get install python-setuptools python-pygame python-opengl \ python-gst0.10 python-enchant gstreamer0.10-plugins-good python-dev \ build-essential libgl1-mesa-dev libgles2-mesa-dev cython python-pip
จากนั้นสั่ง
sudo easy_install kivy
ทดลองโปรแกรมด้านล่าง
ให้สร้างไดเร็กทอรีย่อย จากนั้นป้อนโปรแกรมด้านล่างลงในแฟ้ม main.py
from kivy.app import App
from kivy.uix.widget import Widget
class PongGame(Widget):
pass
class PongApp(App):
def build(self):
return PongGame()
if __name__ == '__main__':
PongApp().run()
Kv Language และการสร้าง widget
Kivy แยกส่วนออกแบบหน้าจอออกมาเป็นแฟ้มนามสกุล kv ในส่วนนี้เราจะทดลองการใช้แฟ้มดังกล่าว และแนวคิดพื้นฐานเกี่ยวกับการตอบสนอง event และ observer patterns
เพิ่มแฟ้มชื่อ pong.kv ในไดเร็กทอรี
#:kivy 1.7.1
<PongGame>:
Label:
font_size: 70
center_x: (root.width * 3) / 4
top: root.top - 50
text: "hello"
ทดลองเรียก python main.py จะเห็นหน้าจอที่มีคำว่า hello
แฟ้ม pong.kv จะถูกอ่านโดยอัตโนมัติโดย App ที่ชื่อ PongApp
เพิ่มลูกบอล
เราจะเพิ่มคลาส PongBall ลงใน main.py
class PongBall(Widget):
pass
จากนั้นแก้ไข pong.kv โดยเพิ่มข้อมูลเกี่ยวกับการวาดวัตถุของคลาส PongBall และเพิ่มลูกบอลลงใน widget PongGame
#:kivy 1.7.1
<PongBall>:
size: 50, 50
canvas:
Ellipse:
pos: self.pos
size: self.size
<PongGame>:
Label:
font_size: 70
center_x: (root.width * 3) / 4
top: root.top - 50
text: "hello"
PongBall:
center: self.parent.center
จากนั้นทดลองรัน
ลูกบอลเคลื่อนที่: Clock, properties
ในส่วนนี้เราจะทำให้ลูกบอลเคลื่อนที่ได้ มีกิจกรรมที่เราต้องทำ 3 ขั้นตอน
1. การปรับสถานะเกม
เกมทั่วไปที่มีการเคลื่อนไหวจะมีการเปลี่ยนตำแหน่งวัตถุต่าง ๆ ตลอดเวลา ในการเขียนโปรแกรมจริง ๆ นั้น เราไม่สามารถปรับตำแหน่งตลอดเวลาได้ แต่เราจะใช้การตั้งเวลาให้ระบบเรียกฟังก์ชันในการปรับตำแหน่งของเราเป็นระยะ
เราจะสร้างเมท็อด update ในคลาส PongGame เพื่อปรับตำแหน่งลูกบอล
class PongGame(Widget):
def update(self, dt):
pass
จากนั้นแก้ไขคลาส PongApp ให้ตั้งเวลาเรียกฟังก์ชันดังกล่าวทุก ๆ 1/60 วินาที
class PongApp(App):
def build(self):
game = PongGame()
Clock.schedule_interval(game.update, 1.0/60.0)
return game
สังเกตว่าเราใช้ Clock ด้วย เราจะต้อง import ชื่อดังกล่าว โดยเพิ่ม
from kivy.clock import Clock
ไว้ที่ต้นโปรแกรม
โปรแกรมดังกล่าวเมื่อเรียกให้ทำงาน จะไม่เห็นผลลัพธ์เปลี่ยนแปลงใด ๆ เพราะว่าเรายังไม่ได้ทำงานอะไรเลยในเมท็อด update