私はプラットフォーマーを書いていて、このクラスを弾丸用にプログラムしました。コンストラクターで NPE を取得していますが、何が問題なのかわかりません。コードは次のとおりです。
package com.ncom.src.entity;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.geom.Vector2f;
import com.ncom.src.Camera;
import com.ncom.src.world.World;
public class Bullet extends HealthEntity {
public Vector2f velocity;
public double angle;
private int timeout = 0;
public Bullet(int lx, int ly, World w, float x, float y) {
super(lx, ly, 5, 5, w, 0);
double hyp = Math.sqrt((x - 600) * (x - 600) + (y - 400) * (y - 400));
angle = Math.asin(y - 400/ hyp);
velocity.y = (float) Math.sin(angle) * 0.4f;
velocity.x = (float) Math.cos(angle) * 0.4f;
}
@Override
public void render(Graphics g, Camera c) throws SlickException {
g.drawImage(new Image("res/actors/bullet.png"), locationX + c.camModX, locationY + c.camModY);
}
@Override
public void update(GameContainer gc, int delta) throws SlickException {
if (timeout > 400) {
this.dead = true;
}
else {
locationX += velocity.x;
locationY += velocity.y;
timeout += 0.4f;
}
}
}
基本的に、弾丸を移動するベクトルの x コンポーネントと y コンポーネントを計算しようとしています。コンストラクターの x と y は、マウスがクリックされた場所を表します。