2016-05-14 17 views
0

Ich benutze Slick2D Ich habe eine Boolean verwendet, um das Inventar zu zeichnen, wenn ich gedrückt habe "I" ist wahr, so wird es auf der Render-Methode, aber ich kann es nicht registrieren, das zweite Mal, wenn ich "ich" drückte, versuchte ich auch einen Zähler, wie oft ich gedrückt wird, und das hat funktioniert nicht so gut.Ich habe ein Inventar ausgezogen, wenn ich "i" drücke, aber ich möchte wissen, wie man es loswerden kann, wenn ich "i" Agian

import org.newdawn.slick.*; 
    import org.newdawn.slick.state.*; 

public class Play extends BasicGameState{ 
    Animation player,moveup,movedown,moveleft,moveright; 
    Image map,bk; 
    Inventory kappa; 
    boolean quit = false; 
    int[] duration ={200,200,200}; 
    float posX=0; 
    float posY=0; 
    float shiftX=posX+640; 
    float shiftY =posY+360; 
    float inX=0; 
    float inY=0; 
    Image[] walkUp = new Image[3]; 
    Image[] walkDown = new Image[3]; 
    Image[] walkLeft = new Image[3]; 
    Image[] walkRight = new Image[3]; 
    PotionLibraray pl; 
    int inv = 0; 
    public Play(int state){ 

    } 
    public void init(GameContainer gc,StateBasedGame sbg)throws SlickException 
    { 
     map = new Image("res/map.png"); 
     bk=new Image("res/BlueKnight.png"); 
     kappa = new Inventory(); 
     pl = new PotionLibraray(); 
     for(int x=0;x<9;x++) 
     kappa.add(pl.shpp); 

     for(int x=0;x<3;x++) 
     { 
     walkDown[x]=bk.getSubImage(x*32, 0, 32, 32); 
     } 
     for(int x=0;x<3;x++) 
     { 
     walkLeft[x]=bk.getSubImage(x*32, 32, 32, 32); 
     } 
     for(int x=0;x<3;x++) 
     { 
     walkRight[x]=bk.getSubImage(x*32, 64, 32, 32); 
     } 
     for(int x=0;x<3;x++) 
     { 
     walkUp[x]=bk.getSubImage(x*32, 96, 32, 32); 
     } 
     moveup = new Animation(walkUp,duration,false); 
     movedown = new Animation(walkDown,duration,false); 
     moveleft = new Animation(walkLeft,duration,false); 
     moveright = new Animation(walkRight,duration,false); 
     player =movedown; 


    } 
    public void render(GameContainer gc,StateBasedGame sbg,Graphics g)throws SlickException 
    { 

     map.draw(posX,posY); 
     player.draw(shiftX,shiftY); 
     g.drawString("player x: "+posX+"\nplayer y: "+posY, 1000, 50); 
     if(inv%2==1||inv==1) 
     { 
      kappa.draw(300, 400); 
     } 

    } 
    public void update(GameContainer gc,StateBasedGame sbg,int delta)throws SlickException 
    { 
     Input input = gc.getInput(); 
     if(input.isKeyDown(Input.KEY_I)) 
     { 
      inv++; 

     } 




     if(input.isKeyDown(Input.KEY_W)) 
     { 
      player=moveup; 
      posY+=delta*0.3f; 

     } 
     if(input.isKeyDown(Input.KEY_S)) 
     { 
      player=movedown; 
      posY-=delta*0.3f; 

     } 
     if(input.isKeyDown(Input.KEY_A)) 
     { 
      player=moveleft; 
      posX+=delta*0.3f; 

     } 
     if(input.isKeyDown(Input.KEY_D)) 
     { 
      player=moveright; 
      posX-=delta*0.3f; 

     } 

    } 


    public int getID() { 

     return 1; 
    } 

} 
+0

Willkommen SO. Bitte posten Sie den Code, mit dem Sie Probleme haben. – CConard96

+0

Warum verwenden Sie nicht einen Booleschen Wert, um den Bestandszustand anzuzeigen? Dann können Sie es jedes Mal umschalten, wenn ich gedrückt wird. "inv =! inv;" – CConard96

+0

Danke, dass es funktioniert – Kapperino

Antwort

0

Sie können einen booleschen Wert anstelle eines int verwenden. Jedes Mal, wenn die Taste "I" gedrückt wird, können Sie den Wert ändern.

if (input.isKeyDown(Input.KEY_I)) 
{ 
    inv = !inv; 
} 

Erstellt Antwort von meinem ursprünglichen Kommentar

+0

der Fehler stellte sich heraus, mit der Taste gedrückt statt gedrückt zu werden, danke sowieso – Kapperino