从枪当前位置射击子弹到鼠标x和;你的位置

时间:2014-12-06 02:18:11

标签: java slick2d

请帮助我在编码时丢失了。

所以我创建了一个子弹类:

package javagame.states;

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.geom.Vector2f;
import org.newdawn.slick.state.StateBasedGame;

public class Bullet {

    private Vector2f pos;
    private Vector2f speed;
    private int lived = 0;

    private boolean aktiv = true;

    private static int MAX_LIFETIME = 2000;

    public Bullet (Vector2f pos, Vector2f speed){
        this.pos = pos;
        this.speed = speed;
    }

    public Bullet(){
        aktiv = false;
    }

    public void update(int t){

        rotation++;

        if(aktiv){
            Vector2f realSpeed = speed.copy();
            realSpeed.scale((t/1000.0f));
            pos.add(realSpeed);

            lived += t;
            if(lived > MAX_LIFETIME) aktiv = false;
        }
    }

    public void init(GameContainer gc, StateBasedGame sbg) throws SlickException{
    }

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

        if(aktiv){
            g.setColor(Color.red);
            g.fillOval(pos.getX(), pos.getY(), 10, 10);
        }
    }

    public boolean isAktiv(){
        return aktiv;
    }
}

然后在我的机器人类中调用子弹类:

package javagame.states;

import java.util.Iterator;
import java.util.LinkedList;

import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.geom.Vector2f;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;

public class Robot2 extends BasicGameState{

    private LinkedList<Bullet> bullets;

    @Override
    public void init(GameContainer gc, StateBasedGame sbg) throws SlickException {
        bullets = new LinkedList<Bullet>();
    }

    @Override
    public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
        for(Bullet b : bullets){
            b.render(gc, g);
        }       
    }

    @Override
    public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException {
        Iterator<Bullet> i = bullets.iterator();
        while(i.hasNext()){
            Bullet b = i.next();
            if(b.isAktiv()){
                b.update(delta);
            }else{
                i.remove();
            }
        }

        Input input = gc.getInput();
        int mouseX = input.getMouseX();
        int mouseY = input.getMouseY();

        int xDistance = (int) (RobotX() + Robotwidth() / 2 - mouseX); //RobotX is the robot image x position same to RobotY
        int yDistance = (int) (RobotY() + Robotheight() / 2 - mouseY);
        double angleToTurn = Math.toDegrees(Math.atan2(yDistance, xDistance));

            if(mouseX != 0){
            angleToTurn += 270;
            }else{
            if(mouseY != 0)
            angleToTurn += 180;
            }
            robot.setRotation((float) angleToTurn); //robot is an image. didn't included the code here to shorten my codes

                if(gc.getInput().isMousePressed(Input.MOUSE_LEFT_BUTTON)){
            bullets.add(new Bullet(new Vector2f(Sprites.getRobotX(), Sprites.getRobotY()), new Vector2f(mouseX, mouseY)));
        }
    }

    @Override
    public int getID() {
        return States.ROBOT;// has an integer value
    }

}

机器人根据鼠标的光标移动完美旋转但是当我按下鼠标的左键发射子弹时,它不会跟随鼠标的光标位置。这是我运行这些代码并按下鼠标左键时的结果。请检查我的样本图片。

http://s12.postimg.org/kwsr41p71/Untitled_1.jpg

我想要实现的是根据鼠标光标位置纠正子弹的方向。

任何帮助都会非常感激。非常感谢你。

0 个答案:

没有答案