使用 Tiniest2D 制作 2D 游戏
游戏循环函数
Lesson 7 of 11 • 10 XP
Keep your place in this quest
Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.
您的脚本可以定义这些特殊函数,发动机会自动调用:
start()
游戏开始时调用一次。用于初始化。
func start() {
setScene(level1)
setX(player, 100)
setY(player, 100)
print("游戏开始了!")
}
onUpdate(dt)
每帧调用。dt 参数是增量时间(自上帧以来的时间,单位为秒)。
var speed = 100
func onUpdate(dt) {
if (isKeyHeld(KEY_RIGHT())) {
setX(player, getX(player) + speed * dt)
}
if (isKeyHeld(KEY_LEFT())) {
setX(player, getX(player) - speed * dt)
}
}
用户界面也从 onUpdate(dt) 绘制。用户界面坐标使用虚拟屏幕空间分辨率。默认情况下,用户界面空间为 100 x 100,您可以使用 setUIResolutionX() 和 setUIResolutionY() 进行更改。在构建当前用户界面时,字体大小、字体颜色和元素颜色可以临时推送到每帧堆栈中。
var musicOn = true
var volume = 5
func onUpdate(dt) {
uiPushElementColor(28, 40, 70, 220)
uiBox(3, 3, 30, 26)
uiPushFontSize(3)
uiPushFontColor(255, 220, 120)
uiLabel("暂停", 6, 6)
uiPopFontColor()
uiPopFontSize()
uiPushFontSize(2)
uiPushFontColor(240, 245, 255)
if (uiButton("继续", 6, 12, 20, 6) == UI_CLICKED()) {
paused = false
}
musicOn = uiToggle("音乐", musicOn, 6, 20, 22, 6)
uiPopFontColor()
uiPopFontSize()
volume = uiSlider("音量", volume, 0, 10, 6, 28, 24, 6)
uiPopElementColor()
}
onCollision(objA, objB)
当两个对象发生碰撞时调用。objA 始终是动态对象或触发器对象(有关详细信息,请参见 碰撞系统 )。
func onCollision(objA, objB) {
var nameA = getName(objA)
var nameB = getName(objB)
if (nameA == "玩家" && nameB == "金币") {
removeObject(level1, objB)
score = score + 1
}
}
end()
游戏关闭时调用。
func end() {
print("感谢您的游戏体验!")
}