Javascript 如何使用for使立方体自行移动?

Javascript 如何使用for使立方体自行移动?,javascript,canvas,Javascript,Canvas,我做了一个节目。它是一个独立运动的立方体。您可以在这里看到:。当立方体达到某个画布极限(向上或向下)时,它无法移动,因此,障碍物会占据它 我想知道,当它处于画布的某个极限时,它会移到画布的中间,但会移到那个里 我唯一得到的是,当它发生时,它“传送”到画布的中间,但这不是我想要的。我想让它像走到画布中间一样 我也把它放在GitHub上: 我已经试着做了一个for,在这个for上,它走到了中间。但它不起作用 现在代码如何(使用“传送”): //如果player与obs在同一个y上,我们需要创建一个布

我做了一个节目。它是一个独立运动的立方体。您可以在这里看到:。当立方体达到某个画布极限(向上或向下)时,它无法移动,因此,障碍物会占据它

我想知道,当它处于画布的某个极限时,它会移到画布的中间,但会移到那个里

我唯一得到的是,当它发生时,它“传送”到画布的中间,但这不是我想要的。我想让它像走到画布中间一样

我也把它放在GitHub上:

我已经试着做了一个for,在这个for上,它走到了中间。但它不起作用

现在代码如何(使用“传送”):

//如果player与obs在同一个y上,我们需要创建一个布尔变量来控制main.js上的移动:

function playerAI (move_middle) {
    if (!move_middle) 
    {
        if ((player.y <= (obs.y + obs.height)) && ((player.y + player.height) >= obs.y)) 
        {
            if (player.y + (player.height / 2) <= obs.y + (obs.height / 2) && player.y > 0)
                player.y -= player.speed; // It'll move to up
            if (player.y + (player.height / 2) >= obs.y + (obs.height / 2) && player.y + player.height < 400)
                player.y += player.speed; // It'll move to down
        }
    }
    else
    {
        player.y += (2*((150 - player.y)>0)-1) * player.speed;
        if (Math.abs(150-player.y) < player.speed)
        {
            player.y = 150;
            move_middle = false;
        }
    }
    if (((player.y - player.height) <= 0) || ((player.y + player.height) >= 400)) 
        move_middle = true;
    return move_middle;
}
2)我们必须改变ai.js,以根据该变量改变其行为:

function playerAI(中间移动){
如果(!中间移动)
{
如果((player.y=obs.y))
{
如果(player.y+(player.height/2)0)
player.y-=player.speed;//它将向上移动
如果(player.y+(player.height/2)>=obs.y+(obs.height/2)和&player.y+player.height<400)
player.y+=player.speed;//它将向下移动
}
}
其他的
{
player.y+=(2*((150-player.y)>0)-1)*player.speed;
if(数学绝对值(150玩家y)<玩家速度)
{
player.y=150;
中间移动=错误;
}
}
如果(((player.y-player.height)=400))
move_middle=true;
返回移动_中间;
}
3)我们必须将ai.js添加到html文件的头部(它必须在main.js之前加载)

我们完成了

每次我们移动一个对象时,在制作动画时,我们都必须更新画布(这是您的问题,我们很少使用for循环来制作动画,除非在非常低的级别工作,因为windows和图形库都有自己的循环来更新画布)

1st)我们需要创建一个布尔变量来控制main.js的移动:

function playerAI (move_middle) {
    if (!move_middle) 
    {
        if ((player.y <= (obs.y + obs.height)) && ((player.y + player.height) >= obs.y)) 
        {
            if (player.y + (player.height / 2) <= obs.y + (obs.height / 2) && player.y > 0)
                player.y -= player.speed; // It'll move to up
            if (player.y + (player.height / 2) >= obs.y + (obs.height / 2) && player.y + player.height < 400)
                player.y += player.speed; // It'll move to down
        }
    }
    else
    {
        player.y += (2*((150 - player.y)>0)-1) * player.speed;
        if (Math.abs(150-player.y) < player.speed)
        {
            player.y = 150;
            move_middle = false;
        }
    }
    if (((player.y - player.height) <= 0) || ((player.y + player.height) >= 400)) 
        move_middle = true;
    return move_middle;
}
2)我们必须改变ai.js,以根据该变量改变其行为:

function playerAI(中间移动){
如果(!中间移动)
{
如果((player.y=obs.y))
{
如果(player.y+(player.height/2)0)
player.y-=player.speed;//它将向上移动
如果(player.y+(player.height/2)>=obs.y+(obs.height/2)和&player.y+player.height<400)
player.y+=player.speed;//它将向下移动
}
}
其他的
{
player.y+=(2*((150-player.y)>0)-1)*player.speed;
if(数学绝对值(150玩家y)<玩家速度)
{
player.y=150;
中间移动=错误;
}
}
如果(((player.y-player.height)=400))
move_middle=true;
返回移动_中间;
}
3)我们必须将ai.js添加到html文件的头部(它必须在main.js之前加载)

我们完成了


每次我们移动一个对象时,在制作动画时,我们都必须更新画布(这是您的问题,我们很少使用for循环来制作动画,除非在非常低的级别工作,因为windows和图形库都有自己的循环来更新画布)

谢谢Rafael,我使用了你的代码,并且做了一些修改。谢谢,不用客气。改变你想要的。谢谢Rafael,我使用了你的代码,并且做了一些改变。谢谢,不用客气。改变你想要的。