Microbit 音乐/滚动输出损坏内存?
Microbit music / scroll output corrupting memory?
我儿子和我正在尝试实现一个有趣的 science.org microbit 教程 - 构建一个“拔河 war”游戏。本质上,按 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, function () {
sprite.change(LedSpriteProperty.X, 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() and game.resume() 会更可靠:
input.onButtonPressed(Button.A, function () {
sprite.change(LedSpriteProperty.X, -0.1)
})
input.onButtonPressed(Button.B, function () {
sprite.change(LedSpriteProperty.X, 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看看有没有区别。
我儿子和我正在尝试实现一个有趣的 science.org microbit 教程 - 构建一个“拔河 war”游戏。本质上,按 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, function () {
sprite.change(LedSpriteProperty.X, 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() and game.resume() 会更可靠:
input.onButtonPressed(Button.A, function () {
sprite.change(LedSpriteProperty.X, -0.1)
})
input.onButtonPressed(Button.B, function () {
sprite.change(LedSpriteProperty.X, 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看看有没有区别。