Microbit 音乐/滚动输出破坏内存?

问题描述

我儿子和我正在尝试实施 fun-science.org 微比特教程之一 - 构建“拔河”游戏。本质上,按 10 次按钮 A 会将精灵移近该按钮,按钮 B 也是如此。当您点击屏幕边缘时,会播放音乐,并且在游戏重新开始之前屏幕上会滚动一条消息。

我们已经让它完全工作了,但是一旦赢得比赛,它似乎没有正确重置。它在模拟器上运行良好,但不适用于物理设备(microbit 2)。

一旦赢得比赛,行为就会变得不稳定。它通常会将精灵放回中间,有时不会,但通常情况下,一个按钮在下一场比赛中不起作用。有时两者都停止工作。在任何情况下,重启都会解决问题。

代码有问题吗?我想知道音乐/消息是否正在破坏某些东西,我需要等待它完成。我已经重新下载了 hex 文件并重新刷了 microbit 几次,所以我想我已经消除了一个损坏的代码文件

Javascript 版本的代码如下所示,但它实际上是使用 Microsoft MakeCode 工具构建的。

input.onButtonpressed(Button.A,function () {
    sprite.change(LedSpriteProperty.X,-0.1)
})
input.onButtonpressed(Button.B,0.1)
})
let sprite: game.LedSprite = null
sprite = game.createSprite(2,3)
basic.forever(function () {
    if (sprite.get(LedSpriteProperty.X) == 0) {
        music.startMelody(music.builtInMelody(Melodies.Birthday),MelodyOptions.Once)
        basic.showString("liverpool wins")
        sprite.set(LedSpriteProperty.X,2)
    } else if (sprite.get(LedSpriteProperty.X) == 4) {
        music.startMelody(music.builtInMelody(Melodies.Entertainer),MelodyOptions.Once)
        basic.showString("rb leipzig wins")
        sprite.set(LedSpriteProperty.X,2)
    }
})

解决方法

我发现如果我在游戏结束时滚动文本和播放音乐时执行 game.pause()game.resume() 会更可靠:

input.onButtonPressed(Button.A,function () {
    sprite.change(LedSpriteProperty.X,-0.1)
})
input.onButtonPressed(Button.B,0.1)
})
let sprite: game.LedSprite = null
sprite = game.createSprite(2,3)
basic.forever(function () {
    if (sprite.get(LedSpriteProperty.X) == 0) {
        game.pause()
        music.startMelody(music.builtInMelody(Melodies.Birthday),MelodyOptions.Once)
        basic.showString("liverpool wins")
        game.resume()
        sprite.set(LedSpriteProperty.X,2)
    } else if (sprite.get(LedSpriteProperty.X) == 4) {
        game.pause()
        music.startMelody(music.builtInMelody(Melodies.Entertainer),MelodyOptions.Once)
        basic.showString("rb leipzig wins")
        game.resume()
        sprite.set(LedSpriteProperty.X,2)
    }
})

您还可以查看以下未使用游戏渲染引擎 https://makecode.microbit.org/projects/tug-of-led 的游戏版本,看看是否有所不同。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...