This site requires JavaScript, please enable it in your browser!
Greenfoot back
excitedbubbles
excitedbubbles wrote ...

2019/6/12

Select box code not working

excitedbubbles excitedbubbles

2019/6/12

#
We had a working section of code that, when a character is clicked, would add a "select box" around the character, and when clicked again it would disappear. After adding some other code, we found that the feature has suddenly stopped working as intended, as now it only adds the box for one character, until they die. Usually when they die, the next character gets the box, but sometimes if you click one, the other gets the box. In other words, it's a bit unpredictable. We are short on time, so any help is appreciated.
public class ImageScrollWorld extends World
{
    public static boolean PlayerPhase = true;
    static boolean PlayerDeath = false;
    public static final int WIDE = 800;
    public static final int HIGH = 600;
    
    static LeftSide leftside = new LeftSide();
    static RightSide rightside = new RightSide();
    static TopSide topside = new TopSide();
    static BottomSide bottomside = new BottomSide();
    
    Scroller scroller;
    Actor scrollActor1;
    Actor scrollActor2;
    Actor scrollActor3;
    Actor scrollActor5;

    public ImageScrollWorld()
    {    
        super(WIDE, HIGH, 1, false);
        GreenfootImage bg = new GreenfootImage("Map1and2.png");
        int bgWide = bg.getWidth();
        int bgHigh = bg.getHeight();
        scroller = new Scroller(this, bg, bgWide, bgHigh);
        scrollActor1 = new Monique();
        scrollActor2 = new Theo();
        scrollActor3 = new Vincent();
        scrollActor5 = new Agnes();
        addObject(scrollActor1, 100, 450);
        addObject(scrollActor2, 100, 550);
        addObject(scrollActor3, 200, 450);
        addObject(scrollActor5, 200, 550);
        scroll();
        prepare();
    }
    
    public void act()
    {
        if(scrollActor1 != null && PlayerDeath == false)
        {
            scroll();
        }
        if(scrollActor2 != null && PlayerDeath == false)
        {
            scroll();
        }
        if(scrollActor3 != null && PlayerDeath == false)
        {
            scroll();
        }
        if(scrollActor5 != null && PlayerDeath == false)
        {
            scroll();
        }
        if (PlayerDeath == true)
        {
            removeObject(leftside);
            removeObject(rightside);
            removeObject(topside);
            removeObject(bottomside);
        }
        
    }

    private void scroll()
    {
        int loX = 100;
        int hiX = WIDE-100;
        int loY = 50;
        int hiY = HIGH-50;
        int dsx = 0, dsy = 0;
        if(scrollActor1.getX()<loX)
        {
            dsx = scrollActor1.getX()-loX;
        }
        if(scrollActor1.getX()>hiX)
        {
            dsx = scrollActor1.getX()-hiX;
        }
        if(scrollActor1.getY()<loY)
        {
            dsy = scrollActor1.getY()-loY;
        }
        if(scrollActor1.getY()>hiY)
        {
            dsy = scrollActor1.getY()-hiY;
        }
        if(scrollActor2.getX()<loX)
        {
            dsx = scrollActor2.getX()-loX;
        }
        if(scrollActor2.getX()>hiX)
        {
            dsx = scrollActor2.getX()-hiX;
        }
        if(scrollActor2.getY()<loY)
        {
            dsy = scrollActor2.getY()-loY;
        }
        if(scrollActor2.getY()>hiY)
        {
            dsy = scrollActor2.getY()-hiY;
        }
        if(scrollActor3.getX()<loX)
        {
            dsx = scrollActor3.getX()-loX;
        }
        if(scrollActor3.getX()>hiX)
        {
            dsx = scrollActor3.getX()-hiX;
        }
        if(scrollActor3.getY()<loY)
        {
            dsy = scrollActor3.getY()-loY;
        }
        if(scrollActor3.getY()>hiY)
        {
            dsy = scrollActor3.getY()-hiY;
        }
        if(scrollActor5.getX()<loX)
        {
            dsx = scrollActor5.getX()-loX;
        }
        if(scrollActor5.getX()>hiX)
        {
            dsx = scrollActor5.getX()-hiX;
        }
        if(scrollActor5.getY()<loY)
        {
            dsy = scrollActor5.getY()-loY;
        }
        if(scrollActor5.getY()>hiY)
        {
            dsy = scrollActor5.getY()-hiY;
        }
        scroller.scroll(dsx, dsy);
    }
public class Allies extends Actor
{
    int HP = 25;
    int totalHP = 25;
    static int ATK = 20;
    int DEF = 15;
    int EnemyAtkCounter = 0;
    Hit hit = new Hit();
    public void movement()
    {
        if (getY()>600)
        {
            setLocation(getX(), 600);
        }
        else if (getY()<=0)
        {
            setLocation(getX(), 0);
        }
        else if (getX()>800)
        {
            setLocation(800, getY());
        }
        else if (getX()<=0)
        {
            setLocation(0, getY());
        }

        if (Greenfoot.isKeyDown("up"))
        {
            setLocation(getX(), getY()-4);
        }   
        if (Greenfoot.isKeyDown("left"))
        {
            move(-4);
        }
        if (Greenfoot.isKeyDown("right"))
        {
            move(4);
        }
        if(Greenfoot.isKeyDown("down"))
        {
            setLocation(getX(), getY()+4);
        }
    }

    int state = 0;
    public void turnPhase()
    {
        if (ImageScrollWorld.PlayerPhase == true)
        {
            getWorld().showText("Player Phase", 700, 50);
        }
        else if (ImageScrollWorld.PlayerPhase == false)
        {
            getWorld().showText("Enemy Phase", 700, 50);
            Greenfoot.delay(20);
        }
    }

    private boolean hovering = false;
    public void HealthCheck()
    {
        List Enemyobjects = getObjectsInRange(100, Enemies.class);
        if (ImageScrollWorld.PlayerPhase == false)
        {
            if (Enemyobjects.size() > 0)
            {
                if (EnemyAtkCounter < 1)
                {
                    if (HP > 0)
                    {
                        HP = HP - (Enemies.ATK - DEF);                           
                        EnemyAtkCounter++;
                        getWorld().showText(HP+"/"+totalHP, getX(), getY()+10);
                        getWorld().addObject(hit, getX(), getY());
                        Greenfoot.delay(10);
                        getWorld().removeObject(hit);
                    }
                    else if (HP <= 0 && totalHP == 25)
                    {
                        getWorld().showText("", getX(), getY()+10);
                        getWorld().removeObject(this);
                        ImageScrollWorld.PlayerDeath = true;
                    }
                }
                else
                {
                    EnemyAtkCounter = 0;
                    ImageScrollWorld.PlayerPhase = true;
                }
            }
        }

        if (Greenfoot.mouseMoved(null))
        {  
            if (Greenfoot.mouseMoved(this) && !hovering)
            {
                getWorld().showText(HP + "/" + totalHP, getX(), getY()+10);
                hovering = true;
            }
            if (Greenfoot.mouseMoved(null) && !Greenfoot.mouseMoved(this) && hovering)
            {
                getWorld().showText("", getX(), getY()+10);
                hovering = false;
            }
        }
    }

    public void act() 
    {
        String key = Greenfoot.getKey();        
        if (key != null && key.equals("space"))
        {
            ImageScrollWorld.PlayerPhase = false;
        }
        HealthCheck();
        boolean mouseState = Greenfoot.mousePressed(this);
        if (ImageScrollWorld.PlayerPhase != false)
        {
            if (state == 0)
            {
                getWorld().removeObject(ImageScrollWorld.leftside);
                getWorld().removeObject(ImageScrollWorld.rightside);
                getWorld().removeObject(ImageScrollWorld.topside);
                getWorld().removeObject(ImageScrollWorld.bottomside);
                if (mouseState == true)
                {
                    state = 1;
                }
            }
            else if (state == 1)
            {                
                movement();
                getWorld().addObject(ImageScrollWorld.leftside, getX()-32, getY());
                getWorld().addObject(ImageScrollWorld.rightside, getX()+32, getY());
                getWorld().addObject(ImageScrollWorld.topside, getX(), getY()-32);
                getWorld().addObject(ImageScrollWorld.bottomside, getX(), getY()+32);
                if (mouseState == true)
                {
                    state = 0;
                }
            }
        }
        if (HP > 0)
        {
            turnPhase();
        }
    }
}
nccb nccb

2019/6/12

#
One thing is that PlayerDeath is never set back to false. I'd also be careful generally about using static variables in the world -- as far as I remember, they are not reset when you click Reset, only when you recompile. This affects PlayerDeath but also leftSide etc. Instead of using ImageScrollWorld.leftSide, use getWorldOfType(ImageScrollWorld.class).leftSide and remove the static.
You need to login to post a reply.