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

2019/11/12

How can i make a key press show an image and change back and other stuff

AVH AVH

2019/11/12

#
I'm trying to make my knight attack an orc. When the space is pressed I want to show an image and attack (remove) the orc. After the image is shown, it goes back to the original images on the Knight. How can I does this, the code i have is not doing anything when the space is pressed. Let me know if you need any more
  public void checkSpace() 
    {
        if (Greenfoot.isKeyDown("space"))
        {
            setImage(M1);
            if (isTouching(Orc.class))
            {
            frame = 1;
            Orc orc = (Orc) getOneIntersectingObject(Orc.class); 
            getWorld().removeObject(orc);
            }
            }
            frame ++;
    }
of the code.
danpost danpost

2019/11/12

#
It is a bit unclear as to what you actually want. However, if the action to attack an orc is to happen only when the key is initially pressed, you may want something like this:
private boolean spaceDown;

public void checkSpace()
{
    if (spaceDown != Greenfoot.isKeyDown("space"))
    {
        spaceDown = ! spaceDown;
        if (spaceDown)
        {
            setImage(M1);
            removeTouching(Orc.class);
        }
        else setImaage(???); // original image
    }
}
This will show the attack image as long as the key is pressed and only remove one orc at the time the key is initially pressed.
AVH AVH

2019/11/12

#
Thanks for the feedback, I add the code and it still does not work, it does not remove the Orc or display the image. Here is the full code for the Knight if it helps.
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Knight here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Knight extends Actor
{
    private GreenfootImage F1, F2, F3, F4, F5, F6;
    private GreenfootImage B1, B2, B3, B4, B5, B6;
    private GreenfootImage M1;
    private int frame = 1;
    private boolean spaceDown;
    public Knight() {
        F1 = new GreenfootImage("KnightwalkForward1Sword.png");
        F2 = new GreenfootImage("KnightwalkForward2Sword.png");
        F3 = new GreenfootImage("KnightwalkForward3Sword.png");
        F4 = new GreenfootImage("KnightwalkForward4Sword.png");
        F5 = new GreenfootImage("KnightwalkForward5Sword.png");
        F6 = new GreenfootImage("KnightwalkForward6Sword.png");
        B1 = new GreenfootImage("KnightwalkBackwardSword1.png");
        B2 = new GreenfootImage("KnightwalkBackwardSword2.png");
        B3 = new GreenfootImage("KnightwalkBackwardSword3.png");
        B4 = new GreenfootImage("KnightwalkBackwardSword4.png");
        B5 = new GreenfootImage("KnightwalkBackwardSword5.png");
        B6 = new GreenfootImage("KnightwalkBackwardSword6.png");
        M1 = new GreenfootImage("KnightAttack.png");
    }
    
    /**
     * Act - do whatever the Knight wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {
        handleKeyPress();
        checkkeys();
        checkBoundaries();
        
       
    }
    
    public void handleKeyPress() 
    {
        checkLeftArrow();
        checkRightArrow();
        checkUpArrow();
        checkDownArrow();

    }
    
    public void checkLeftArrow()
    {
        if(Greenfoot.isKeyDown("left"))
        {
            setRotation(0);
            move(-2);
            if(frame == 1) {
                setImage(B1);
            }
            else if(frame == 2){
                setImage(B2);
            }
            else if(frame == 3) {
                setImage(B3);
            }
            else if(frame == 4) {
                setImage(B4);
            }
            else if(frame == 5) {
                setImage(B5);
            }
            else if(frame == 6) {
                setImage(B6);
                frame = 1;
                return;
            }
            frame ++;
        }
    }
    
    public void checkRightArrow() 
    {
        if(Greenfoot.isKeyDown("right"))
        {
            move(2);
            if(frame == 1) {
                setImage(F1);
            }
            else if(frame == 2){
                setImage(F2);
            }
            else if(frame == 3) {
                setImage(F3);
            }
            else if(frame == 4) {
                setImage(F4);
            }
            else if(frame == 5) {
                setImage(F5);
            }
            else if(frame == 6) {
                setImage(F6);
                frame = 1;
                return;
            }
            frame ++;
        }

    }
    
    public void checkUpArrow() 
    {
        if(Greenfoot.isKeyDown("up"))
        {
            
            setLocation(getX(), getY() -1);
            
        if(frame == 1) {
                setImage(F1);
            }
            else if(frame == 2){
                setImage(F2);
            }
            else if(frame == 3) {
                setImage(F3);
            }
            else if(frame == 4) {
                setImage(F4);
            }
            else if(frame == 5) {
                setImage(F5);
            }
            else if(frame == 6) {
                setImage(F6);
                frame = 1;
                return;
            }
            frame ++;
        }

    }
    
    public void checkDownArrow() 
    {
        if(Greenfoot.isKeyDown("down"))
        {
            setLocation(getX(), getY() +1);
            if(frame == 1) {
                setImage(B1);
            }
            else if(frame == 2){
                setImage(B2);
            }
            else if(frame == 3) {
                setImage(B3);
            }
            else if(frame == 4) {
                setImage(B4);
            }
            else if(frame == 5) {
                setImage(B5);
            }
            else if(frame == 6) {
                setImage(B6);
                frame = 1;
                return;
            }
            frame ++;
        }

    }
    
    public void checkSpace() 
    {
        if (spaceDown != Greenfoot.isKeyDown("space"))
        {
            spaceDown = ! spaceDown;
            if (spaceDown)
            {
                setImage(M1);
                removeTouching(Orc.class);
            }
            else setImage(B6);
            }  
    }
          
    public void checkBoundaries()
    {
       if(getY()<285)
       {
           setLocation(getX(),getY()+1);
       }
        
        if(getX()<141 && getY()<313)
        {
            setLocation(getX(),getY()+10);
        }
    }
    
    public void checkkeys()
    {
        String key = Greenfoot.getKey();
        if("x" .equals(key))
        {
            getWorld() .addObject(new MagicFlame(), getX(), getY());
        }
        
        if("z" .equals(key))
        {
            getWorld() .addObject(new MagicFlameLeft(), getX(), getY());
        }
    }
}
danpost danpost

2019/11/12

#
You need to call the checkSpace method from inside the act method.
AVH AVH

2019/11/12

#
Thanks got it working
You need to login to post a reply.