我在Scratch上做了一个划船游戏(只是为了好玩),我在得分上遇到了问题。如果你想看看我已经写的代码,游戏的链接是https://scratch.mit.edu/projects/66541388/。由于某些原因,当游戏进行时,得分变量实际上并不总是以1为单位改变。每次我测试它的时候,它都会改变一个不同的数字。有没有关于问题是什么或者如何解决它的想法?
以下是代码的核心:
when green flag clicked
set [Score v] to [0]
set x to (0)
set y to (0)
point in direction (pick random (-90) to (90))
forever
if <(y position) < [-146]> then
broadcast [gameOver v]
stop [all v]
end
if <touching [Paddle v]?> then
change [color v] effect by (pick random (1) to (1000))
change [Score v] by (1)
point in direction (pick random (-90) to (90))
end
move (10) steps
if on edge, bounce
end发布于 2016-08-20 08:32:03
虽然这两个答案都是正确的,但您可以简单地将评分放在不同的代码块中,使用wait until <not<touching [Paddle v]>>,如下所示:
when green flag clicked
forever
if <touching [Paddle v]> {
change [color v] effect by (pick random (1) to (1000))
change [Score v] by (1)
wait until <not<touching [Paddle v]>>发布于 2015-06-17 00:56:04
您的问题是您正在处理竞争条件。当您测试划桨和企鹅之间的碰撞时,企鹅没有像再次调用检测那样快速地离开划桨,导致它在分数上增加了一个以上。您可以添加一些计时代码,以便只有在计时器大于比方说一秒的情况下,它才能将分数递增1。然后在每次“合法”命中后重置计时器。
还有其他方法来处理这些情况,但你必须有创造性。
发布于 2015-06-17 03:12:04
urnotsam's answer在技术上是正确的,但我想给出它背后的一些理由和一个替代解决方案。
问题在于企鹅不是正方形。当你击打球拍时,它会转向一个随机的方向,并移动10步。现在,如果它一开始是面向侧面的,随机方向也是相当横向的,它可以通过这10步逃脱。如果两者都是直立的,也是一样的。但是如果它从侧面开始并垂直结束,它现在比以前更低了,即使在移动了10步之后,它的一部分仍然接触到了球拍。在我看来,让它领先十步或二十步应该会让它逃脱,而不会弄乱你的得分。
if <touching [Paddle v]?> then
change [color v] effect by (pick random (1) to (1000))
change [Score v] by (1)
point in direction (pick random (-90) to (90))
move (20) steps
endhttps://stackoverflow.com/questions/30873574
复制相似问题