-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;
            }
        }
    }

}

これに関するヘルプは良いでしょう(または、モブを作成するためのより正確で簡単な方法がある場合)

ありがとう

4

1 に答える 1

0

問題は でのSystem.out.println(...)通話にある可能性がありますautoEveryThing(...)。これは 1 秒間に何度も行われており、コンソールへの出力は最も負荷の高い作業の 1 つです。

于 2012-11-29T18:27:24.277 に答える