Javascript 跳转算法isn';当到达一个街区时,它不工作
这是我的JSFIDLE: 正如您在我的JSFIDLE中所看到的,当球到达一个块时,跳转函数不起作用。我知道我的算法中缺少了一些使球跳转的东西,但我无法理解,我希望您能提供一些帮助Javascript 跳转算法isn';当到达一个街区时,它不工作,javascript,jquery,html,canvas,Javascript,Jquery,Html,Canvas,这是我的JSFIDLE: 正如您在我的JSFIDLE中所看到的,当球到达一个块时,跳转函数不起作用。我知道我的算法中缺少了一些使球跳转的东西,但我无法理解,我希望您能提供一些帮助 if (InAir) { if (InAir == 1) { if (ball.y > jumpMaxHeight) { ball.y -= gravity; } else { InAir = 2; }
if (InAir) {
if (InAir == 1) {
if (ball.y > jumpMaxHeight) {
ball.y -= gravity;
} else {
InAir = 2;
}
}
if (InAir == 2) {
if (ball.y < 390) {
ball.y += gravity;
} else {
ball.y = 390;
InAir = false;
ball.color = "black";
}
}
} else if (keydown.up && !InAir) {
InAir = 1;
ball.color = "#4285F4";
}
for (var j = 0; j < Blocks.collection.length; j++) {
if (Collision(ball, Blocks.collection[j])) {
//console.log("collision");
ball.y = (Blocks.collection[j].blockY - ball.radius) ;
}
}
if(InAir){
如果(InAir==1){
如果(ball.y>jumpMaxHeight){
ball.y-=重力;
}否则{
InAir=2;
}
}
如果(InAir==2){
如果(球y<390){
ball.y+=重力;
}否则{
球y=390;
InAir=false;
ball.color=“黑色”;
}
}
}else if(keydown.up&&!InAir){
InAir=1;
ball.color=“#4285F4”;
}
对于(var j=0;j
您的碰撞检测似乎工作得很好。
它的gameloop有一些问题。
您不应该在向上按键时执行碰撞检测,因为这只会触发一次。当球在空中时,你需要随时检查是否有碰撞。
像这样:
…}else if(keydown.up&&!InAir){
InAir=1;
ball.color=“#4285F4”;
}
如果(在空中){
对于(var j=0;j
用他的代码你可以跳到第一个平台上。(还要注意,我更改了ball.y的位置)
但仍存在一些问题:
- 球不能离开平台,因为他一悬空,与平台的碰撞就开始了
- 如果你将球向左或向右移动到平台边界上,如果他再次开始摔倒,而不是在空中盘旋,那会更有趣。(相信我,我玩过一些游戏)
这不是一个完美的答案,但我希望这会对您有所帮助。也许可以从以下几点开始: 我更新了跳跃的默认值为80(足够高,可以到达下一个平台),然后在keydown.up上,我用当前的球更新它。y位置+默认值 我认为问题在于你如何追踪球是否在空中,当检测到碰撞时,球从技术上讲不再在空中,但你没有任何这样的说法,请参见下面截取的代码@mainguy基本上是怎么说的,但稍作修改,不继续重新分配球。y,在小提琴中,它工作得相当好:
if( InAir )
{
for (var j = 0; j < Blocks.collection.length; j++) {
if (Collision(ball, Blocks.collection[j])) {
//console.log("collision");
var calc = (Blocks.collection[j].blockY - ball.radius);
if( ball.y != calc ) {
ball.y = calc;
ball.color = "black";
InAir = 0;
}
}
}
}
if(InAir)
{
对于(var j=0;j
我的小提琴打破了代码的重力部分,因为你现在还需要知道圆的x是否通过了矩形的x屏障,如果没有,就下降。所以这并不是一个完整的解决方案,但是如果你从障碍物上向右或向左跳跃,重力过程就像预期的一样,只要不存在碰撞,你就会跌到底部。还有一些细微的调整,但我想你可以通过我添加的零件旁边的注释找到它们。伙计,这是一个在空中盘旋的虫子,它应该会再次掉到地上吗?不,不是虫子,是球!你在自己的日常生活中称之为球。一个虫子通常有六条腿,而且很有可能会飞到空中:-)我的意思是一个游戏错误,球不应该浮在空中,而是应该掉到地上,当它在区块边界之外时:)谢谢你更新小提琴。你很有帮助,尽管经过一些深入的研究,我改变了我所有的算法,这是我的新版本游戏:正如你所看到的,地心引力工作得很好,当它在一个街区上并离开时,它不会漂浮在空中,现在我期待着建立一些关卡谢谢:太棒了!很高兴我能帮忙。我喜欢摆弄它。
if( InAir )
{
for (var j = 0; j < Blocks.collection.length; j++) {
if (Collision(ball, Blocks.collection[j])) {
//console.log("collision");
var calc = (Blocks.collection[j].blockY - ball.radius);
if( ball.y != calc ) {
ball.y = calc;
ball.color = "black";
InAir = 0;
}
}
}
}