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("感谢您的游戏体验!")
}