2012-11-29 53 views
-1

“我正在做一个简单的游戏,对于它的一部分,我希望那里有敌人,它会攻击你。要做到这一点,我需要让他们移动 在这个代码中,“敌人”只是一个球。 我使用一个名为“mob1”的对象作为球的位置,以便以后我可以有多个球。移动一个球由于某种原因非常不好?

(顺便说一句,进出口使用Slick-只是柜面改变任何东西)

我的比赛状态 -

package Worlds.World1; 

import org.lwjgl.input.Mouse; 
import org.newdawn.slick.Animation; 
import org.newdawn.slick.Color; 
import org.newdawn.slick.GameContainer; 
import org.newdawn.slick.Graphics; 
import org.newdawn.slick.Image; 
import org.newdawn.slick.Input; 
import org.newdawn.slick.SlickException; 
import org.newdawn.slick.state.BasicGameState; 
import org.newdawn.slick.state.StateBasedGame; 

import Main.SimpleMob; 

public class World1A extends BasicGameState{ 
    String mousePosition; 
    Image world; 
    Animation player, playerLeft, playerRight; 
    int[] duration = {200,200}; 
    float playerX; 
    float playerY; 
    float WorldX; 
    float WorldY; 
    float PlayerVisibleScreenX; 
    float PlayerVisibleScreenY; 
    String MovementDirection; 
    SimpleMob mob1 = new SimpleMob(); 
    public World1A(int state){ 
    } 

    public void init(GameContainer gc, StateBasedGame sbg) throws SlickException{ 
     Image [] WalkingLeft = {new Image("res/Sprites/buckysLeft.png"),new Image("res/Sprites/buckysLeft.png")}; 
     Image [] WalkingRight = {new Image("res/Sprites/buckysRight.png"),new Image("res/Sprites/buckysRight.png")}; 

     playerLeft = new Animation(WalkingLeft, duration, false); 
     playerRight = new Animation(WalkingRight, duration, false); 
     player = playerRight; 
     playerX = 0; 
     playerY = 0; 
     WorldX = 0; 
     WorldY = 0; 
     world= new Image("res/WorldImages/WorldBackGround.png"); 
     mousePosition="null"; 
     MovementDirection = "Not Moved Yet"; 
    } 

    public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException{ 
     world.draw(WorldX, WorldY); 
     g.setColor(Color.white); 
     g.fillOval(WorldX+mob1.getX(), WorldY+mob1.getY(), 50, 50); 
     g.fillRect(WorldX, WorldY+300, 500, 10); 
    } 

    public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException{ 
     mob1.autoEveryThing(delta, playerX, playerY); 
     int posX = Mouse.getX(); 
     int posY = Mouse.getY(); 
     mousePosition = "X: " + posX + "\nY: " + posY; 

     Input input = gc.getInput(); 
     if(input.isKeyDown(Input.KEY_LEFT)){ 
      WorldX += delta * 0.1f; 
      MovementDirection = "Left"; 
      player = playerLeft; 
     }else if(input.isKeyDown(Input.KEY_RIGHT)){ 
      WorldX -= delta * 0.1f; 
      MovementDirection = "Right"; 
      player = playerRight; 
     }else{ 
      MovementDirection = "Not Moving"; 
     } 
    } 


    //DO NOT CHANGE 
    public int getID(){ 
     return 2; 
    } 

} 

而我的暴徒接收机类

package Main; 

import org.newdawn.slick.Graphics; 

public class SimpleMob { 

    //This class shall be used as an object creator. This will randomly move a graphic around, near to a player 
    private float MobX; 
    private float MobY; 
    private int AmountMoved = 0; 
    private boolean MoveRight = true; 
    private boolean MoveLeft; 
    private boolean PlayerNear = false; 
    public boolean PlayerDetected = false; 

    //Used to find the mobs X 
    public float getX(){ 
     return MobX; 
    } 

    //Used to find the mobs Y 
    public float getY(){ 
     return MobY; 
    } 

    //Used to set the mobs X 
    public void setX(float X){ 
     MobX = X; 
    } 

    //Used to set the mobs Y 
    public void setY(float Y){ 
     MobY = Y; 
    } 

    //Used to simply move the mob on its X co-ords 
    public void moveX(int delta){ 
     MobX += delta*0.1f; 
    } 

    //Used to simply move the mob on its Y co-ords 
    public void moveY(int delta){ 
     MobY += delta*0.1f; 
    } 

    public void autoEveryThing(int delta, float playerX, float playerY) { 

     System.out.println(AmountMoved); 
     // If the player has not been spotted the NPC/Mob will move left and 
     // right by 100 Pixels. 
     if (MoveRight == true) { 
      AmountMoved++; 
      MobX += delta * 0.1f; 
      if (AmountMoved == 100) { 
       MoveRight = false; 
       MoveLeft = true; 
       AmountMoved = 0; 
      } 
     } 
     if (MoveLeft == true) { 
      MobX -= delta * 0.1f; 
      AmountMoved++; 
      if (AmountMoved == 100) { 
       MoveRight = true; 
       MoveLeft = false; 
       AmountMoved = 0; 
      } 
     } 
    } 

} 

任何帮助将是好,(或者,如果那里有一个更正确的/ easyier方式让小怪)

感谢

+0

试着问一个具体的编程问题,你限制你的问题的范围,具体的问题。 –

+0

“特定”你究竟是什么? –

+0

我只看到了代码的一面墙和你想做什么的简短解释 –

回答

0

的问题可能出在你的autoEveryThing(...)电话System.out.println(...)。这是每秒多次完成的,输出到控制台是人们可以做的最密集的事情之一。

+0

不,这不是。本的System.out.println()我加了之后,看它是否是财产以后做的AmountMoved整数,删除它没有迪菲昂斯 –

+0

好,取出的System.out.println做去除一些参差不齐的运动,但我仍然相当多。 –

+0

我仍然对你的意思有点混淆:)你的意思不是与时间有关的平滑运动,还是以不同于应有的方式运动? –

相关问题