私はJavascript、Canvas、およびKineticJSを使用して、マウスカーソルに弾丸を発射したい小さな練習用スクリプトを作成しています。
唯一の問題は、弾丸をマウスにまっすぐに当てる方法が本当に見つからないことです。マウスに対してまっすぐではなく、常に対角線上にあるように見えます。今、私は自分のコードが正しくないことを知っています。オブジェクトを斜めではなくマウスに移動する方法を知りたいです。
XとYを別々に設定してみました。しかし、それは最初に斜めにジャンプし、最後の数ピクセルを適切なXにジャンプさせますが、これは明らかに正しくありません。
ここにフィドルがあります (弾丸関数は 166 行にあります): http://jsfiddle.net/eRQ3P/ (注: 弾丸は現在破棄されていません。そのため、数回の弾丸の後に遅れます!)(注 2: に撃つ左上隅に移動して、弾丸がどのように飛ぶかを確認します)
それにもかかわらず; ここに、目的地XとYを取得する弾丸関数があります(クリック時のマウスXとYのXとYです)
function Bullet(destinationX, destinationY) {
this.x = sprite.getX()+(sprite.getWidth()/2);
this.y = sprite.getY()+(sprite.getHeight()/2);
this.destinationX = destinationX;
this.destinationY = destinationY;
this.finished = false;
this.projectile = new Kinetic.Circle({
x: this.x,
y: this.y,
radius: 5,
fill: 'pink',
name: 'projectile'
});
this.draw = function(index) {
var mayDelete = true;
if (this.headingY == 'north') {
if (this.projectile.getY() > this.destinationY) {
this.projectile.setAbsolutePosition(this.projectile.getX() - (2*speed), this.projectile.getY() - (2*speed));
//this.projectile.setX(this.projectile.getX() - (2*speed));
mayDelete = false;
}
}
if (mayDelete == true) {
this.projectile.remove();
bullets.splice(index, 1);
}
ammoLayer.draw();
}
}