我試圖讓 10 個敵人隨我移動我的玩家嘗試在 statmrnts 時進行一些操作,但無法弄清楚。
公共密封部分類 MainPage : Page { int[] arr_Enemy = new int[10];
Rectangle Enemy;
Rectangle Player;
Random rnd = new Random();
public MainPage()
{
this.InitializeComponent();
Window.Current.CoreWindow.KeyDown = PlayerMovement;
MyCanvas.Background = new ImageBrush
{
ImageSource = new BitmapImage(new Uri("ms-appx:///Assets/Background.jpg"))
};
Player = new Rectangle();
Player.Width = 50;
Player.Height = 50;
Player.Fill = new ImageBrush
{
ImageSource = new BitmapImage(new Uri("ms-appx:///Assets/PlAYER2.??GIF"))
};
MyCanvas.Children.Add(Player);
Canvas.SetTop(Player, 700);
Canvas.SetLeft(Player, 900);
for (int i = 0; i < arr_Enemy.Length; i )
{
Enemy.Fill = new ImageBrush
{
ImageSource = new BitmapImage(new Uri("ms-appx:///Assets/enemy.GIF"))
};
Enemy.Width = 120;
Enemy.Height = 115;
MyCanvas.Children.Add(Enemy);
Canvas.SetTop(Enemy, rnd.Next(750));
Canvas.SetLeft(Enemy, rnd.Next(750));
}
}
private void PlayerMovement(CoreWindow sender, KeyEventArgs args)
{
VirtualKey movement = args.VirtualKey;
switch (movement)
{
case VirtualKey.Up:
Canvas.SetTop(Player, Canvas.GetTop(Player) - 10);
break;
case VirtualKey.Down:
Canvas.SetTop(Player, Canvas.GetTop(Player) 10);
break;
case VirtualKey.Left:
Canvas.SetLeft(Player, Canvas.GetLeft(Player) - 10);
break;
case VirtualKey.Right:
Canvas.SetLeft(Player, Canvas.GetLeft(Player) 10);
break;
}
}
} }
uj5u.com熱心網友回復:
您的代碼需要做兩處小改動
1:
Rectangle Enemy;
至
System.Collections.Generic.List<Rectangle> Enemies = new System.Collections.Generic.List<Rectangle>();
2:
Enemy.Fill = new ImageBrush . . . .
至
var Enemy = new Rectangle();
Enemies.Add(Enemy);
Enemy.Fill = new ImageBrush . . . .
uj5u.com熱心網友回復:
如何讓我的敵人追逐我的玩家?
更好的方法是制作計時器,逐步將敵人移動到玩家身上。我們可以得到敵人和玩家的位置。并測量它們之間的距離。然后根據距離呼叫 set left-top 方法。并在敵人和玩家交叉時停止移動。
例如
private void Chase(FrameworkElement enemy)
{
var enemyLeft = Canvas.GetLeft(enemy);
var enemyTop = Canvas.GetTop(enemy);
var playerLeft = Canvas.GetLeft(Player);
var playerTop = Canvas.GetTop(Player);
var distance = new Point(playerLeft - enemyLeft, playerTop - enemyTop);
if (distance.X == 0 && distance.Y == 0 || !DetectCollisions(Player,enemy).IsEmpty) return;
if (distance.X > 0 && distance.Y > 0)
{
//down-right
Canvas.SetTop(enemy, Canvas.GetTop(enemy) 10);
Canvas.SetLeft(enemy, Canvas.GetLeft(enemy) 10);
}
else if (distance.X < 0 && distance.Y < 0)
{
//up-left
Canvas.SetTop(enemy, Canvas.GetTop(enemy) - 10);
Canvas.SetLeft(enemy, Canvas.GetLeft(enemy) - 10);
}
else if (distance.X > 0 && distance.Y < 0)
{
Canvas.SetTop(enemy, Canvas.GetTop(enemy) - 10);
Canvas.SetLeft(enemy, Canvas.GetLeft(enemy) 10);
//up-right
}
else if (distance.X < 0 && distance.Y > 0)
{
Canvas.SetTop(enemy, Canvas.GetTop(enemy) 10);
Canvas.SetLeft(enemy, Canvas.GetLeft(enemy) - 10);
//down-left
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/482837.html
