物体不会在绿脚中检测到世界的边缘

时间:2014-11-25 10:44:32

标签: greenfoot

这是我正在研究的绿色项目。它应该在物体接近边缘时使物体反弹

我希望有人会意识到为什么这不起作用,它只是从顶部落下

    import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

    public class Asteroid extends Actor
    {
        /**
         * Act - do whatever the Asteroid wants to do. This method is called whenever
         * the 'Act' or 'Run' button gets pressed in the environment.
         */
        boolean  direction=true; //assigns the fall direction (true is down false is up)
        int acceleration =0; 
        public void act() 
        {
            if(getY()>(getWorld().getHeight())-50 && direction== true  ) 
            //checks if it is near the bottom of the world  (Y is reversed so at the top of the world Y is high)     
            {
                direction= false;
                acceleration = 0; //Resets speed
            }
            if(getY()<50  && direction== false)
            {
                direction= true;
                acceleration = 0;
            }
            if(direction=true)
            {
                setLocation(getX(), getY()+(int)(Greenfoot.getRandomNumber(25)+acceleration));
            }
            else if(direction=false)
            {
                setLocation(getX(), getY()-(int)(Greenfoot.getRandomNumber(25)+acceleration));
            }
            acceleration++;
        }    
    }

2 个答案:

答案 0 :(得分:0)

您需要在边界处更改方向。而不是将其存储为布尔值(true,false),将其存储为(1,-1)并在边界处更改它。

import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)


public class Asteroid extends Actor
{
    int direction=1; 
    int acceleration=0; 

    public void changeDirection()
    {
        direction = direction * -1;
    }
    public void resetAcceleration()
    {
        acceleration=0;
    }

    public int getAcceleration()
    {
        int value = (Greenfoot.getRandomNumber(25) + acceleration)* direction;
        return value;
    }

    public void act() 
    {
        if(getY()>(getWorld().getHeight())-50 && direction > 0  ) 
        {
            changeDirection();
            resetAcceleration();
        }
        if(getY()<50  && direction < 0)
        {
            changeDirection();
            resetAcceleration();
        }

        setLocation(getX(), getY()+getAcceleration());
        acceleration++;
    }    
}

答案 1 :(得分:0)

这段代码就是问题:

 if(direction=true)

这将指定为真方向;你需要双等于检查平等:

 if (direction == true)

Java允许这样做很烦人。 if。

上的else子句也存在同样的问题