出于某种原因,移动球是非常摇摇欲坠的?

时间:2012-11-29 18:23:56

标签: java slick2d

'我正在制作一个简单的游戏,对于其中的一部分,我希望那里有敌人的攻击你。首先,我需要让它们移动 在这段代码中,“敌人”只是一个球。 我正在使用一个名为“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;
            }
        }
    }

}

任何有关这方面的帮助都会很好,(或者如果有更正确/更容易的方式来制造小怪)

由于

1 个答案:

答案 0 :(得分:0)

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