我是SpriteKit的新手,正在通过制作一个飞扬的鸟形游戏来学习。
我正在使用一个PhyshicsBody绑定到纹理的鸟节点。
问题在于,当小鸟击中得分节点时,偶尔会记录到多次碰撞。我在第一次调用该函数时添加了一个if来删除节点,但是我仍在注册多个冲突。
如果使用该语句,我本可以认为这可以防止问题发生,为什么仍会发生这种情况?
感兴趣的功能:
function encryption() {
switch (document.getElementById("methods").value) {
case "Encrypt":
var str = document.getElementById("text_encode").value;
// store the original string in a hidden field
document.getElementById("text_HiddenField").value = str;
var amount = Number(prompt("Number of shift"));
var output = "";
for (var i = 0; i < str.length; i++) {
var c = str[i];
var code = str.charCodeAt(i);
if ((code >= 65) && (code <= 90))
c = String.fromCharCode(((code - 65 + amount) % 26) + 65);
else if ((code >= 97) && (code <= 122))
c = String.fromCharCode(((code - 97 + amount) % 26) + 97);
output += c;
}
document.getElementById("text_decoded").value = output;
break;
}
}
function decryption() {
switch (document.getElementById("methods1").value) {
case "Decrypt":
str = document.getElementById("text_HiddenField").value;
document.getElementById("text_decoded").value = str;
break;
}
}
完整代码:
<label for="methods">Select your methods : </label>
<br>
<br>
<select name="methods" id="methods">
<option value="Encrypt">Encrypt</option>
</select>
<br>
<br>
<input type="button" value="Encrypt" onClick=encryption()>
<br>
<br>
<textarea name="text" id="text_decoded" style="width: 10%;height: 40px"></textarea>
<textarea name="text" id="text_encode"> Enter message here: That you wish to decrypt</textarea>
<textarea name="text" id="text_HiddenField"></textarea> <!--Hide This-->
<br>
<br>
<label for="methods1">Select your methods : </label>
<br>
<br>
<select name="methods" id="methods1">
<option value="Decrypt">Decrypt</option>
</select>
<br>
<br>
<input type="button" value="Decrypt" onClick=decryption()>
答案 0 :(得分:1)
对于刚开始使用物理学进行游戏开发的人来说,这是一个常见问题。
func didBegin(_ contact:SKPhysicsContact)每秒被调用60次(最佳)。因此,这意味着当您的“鸟”与某个物体碰撞时,它每秒会被检测到60次。您需要在某处放置一个标志来确定该鸟是否已与某个物体碰撞,因此如果该标志为真,则不再进行碰撞检查。
看到自己没有鸟,您可以在GameScene中放置一个变量来存储此碰撞。
private var isDead = false
然后,当对象与管道碰撞时,将其设置为true
isDead = true
最后在检查碰撞时使用它
if moving.speed > 0 && !isDead {
}
或者,我希望您在didBegin函数的开头。这样可以节省您的代码,并在代码中嵌套“如果”
guard moving.speed > 0, !isDead else { return }