私はあなたがカーソルに向かって飛んでいる投射物を撃つためにクリックするゲームを作っています。しかし、カーソルの方向に飛行機を飛ばす方法についてはわかりません。私はしかし、それはカーソルで撮影し、それを撮影した場所のほぼランダム思えませんでした...カーソルを使って投射物を投射する
public bool PreFilterMessage(ref Message m)
{
if(m.Msg == 0x0201)
{
Point MousePos = PointToClient(Form.MousePosition);
slope = (MousePos.Y - aCharacter.Location.Y)/(MousePos.X - aCharacter.Location.X);
aLaser.Location = aCharacter.Location;
if (MousePos.X < aCharacter.Location.X)
lasDir = -1;
else
lasDir = 1;
laserLaunched = true;
return true;
}
private void aChMvmTimer_Tick(object sender, EventArgs e)
{
if(laserLaunched)
{
aLaser.Location = new Point(aLaser.Location.X + lasDir, aLaser.Location.Y + (slope * lasDir));
aLaser.Visible = true;
}
else
{
aLaser.Visible = false;
}
}
をこのような直線の傾きを見つけてみました。これをどうやってやりますか?
別の解決方法を試しましたが、私はそれが正しいことを疑っています。
int currentTime = Environment.TickCount;
double deltaTime = (currentTime - lastTime)/1000.0;
lastTime = currentTime;
if (laserLaunched)
{
int movementSpeed = 20;
//aLaser.Location = new Point(aLaser.Location.X + lasDir, aLaser.Location.Y + (slope * lasDir));
aLaser.Visible = true;
double x = aLaser.Location.X - curMousePos.X;
double y = aLaser.Location.Y - curMousePos.Y;
double loc = ((int)x^2) + ((int)y^2);
loc = Math.Sqrt(((int)x^2) + ((int)y^2));
x = (x/(int)loc);
y = (y/(int)loc);
x *= (int)deltaTime * movementSpeed;
y *= (int)deltaTime * movementSpeed;
aLaser.Location = new Point(aLaser.Location.X + (int)x, aLaser.Location.Y + (int)y);
}
私はそれを正しく行いましたか?
"それは動作しませんでしたが、" 問題の説明ではありません。そして、「わずかな」修飾子は、それを全く改良しない。 –
これを指摘してくれてありがとう!私がそれを投稿したとき、私はそれを認識しませんでした。 – Beldar4000