[英]How to code simple attack logic for 2D game in C#?
同樣,攻擊也行得通,但是,主要的問題是我應該在一個方向上進行武器攻擊。
嗨,我正在制作回合制動作游戲,玩家可以使用某種武器來移動或攻擊敵人。 敵人只是使用一種簡單的攻擊邏輯,即檢查玩家是否在附近,然后讓玩家受到傷害。 Nearest()使用Math.Abs查找絕對距離。
這是用於敵人攻擊的舊的Nearest()方法:
public bool Nearby(Point locationToCheck, int distance)
{
if (Math.Abs(location.X - locationToCheck.X) < distance &&
(Math.Abs(location.Y - locationToCheck.Y) < distance))
{
return true;
}
else
{
return false;
}
}
因此,包含上述方法的Enemy類將Player的位置傳遞到該方法中,並將其自身的攻擊范圍作為int值,然后將其與自己的位置進行比較,如果返回true,則會損壞玩家。
但是,玩家攻擊更加復雜。 他的武器必須首先檢查給定方向上的Nearest()距離。 因此,我需要編寫一個新的重載Nearest()方法來使用播放器的武器攻擊邏輯。 我不知道該怎么做。 不知何故,播放器的“武器攻擊”方法應該將參數傳遞給以下DamageEnemy()方法:
protected bool DamageEnemy(Direction direction, int radius, int damage, Random random)
{
Point target = game.PlayerLocation;
for (int distance = 0; distance < radius; distance++) {
foreach (Enemy enemy in game.Enemies) {
if (Nearby(enemy.Location, target, distance)) {
enemy.Hit(damage, random);
return true;
}
}
target = Move(direction, target, game.Boundaries);
}
return false;
}
該DamageEnemy方法依賴於兩個新的重載方法,即上述的Move()方法和重載的Nearest()方法。 我是在Oreilly Headfirst C#中通過教程進行此操作的。 480,順便說一句。
*原始的繼承Move()方法很簡單; 它只是根據一個方向枚舉的4個方向之一的輸入來更新沿某個方向繼承對象的對象的位置字段。
我想自己做,但是真的無法弄清楚攻擊邏輯應該如何工作! 誰能給我一些提示,以指示我正確的方向? 我不知道他們要我為新的Move()重載方法做什么。 玩家是否應該跳到進攻點? 還是還有其他功能? 謝謝!
for (int distance = 0; distance < radius; distance++) {
foreach (Enemy enemy in game.Enemies) {
if (Nearby(enemy.Location, target, distance)) {
enemy.Hit(damage, random);
return true;
}
這真的很糟糕。 for例程是多余的-可以從敵人那里獲得距離,位置和目標,這將永遠需要檢查每個距離上的每個敵人。 再加上如果有障礙,該怎么辦。 我認為重寫的Nearest()函數中的“距離”應該是“方向”,它將回答您的問題。 我建議:
foreach (Enemy enemy in game.Enemies) {
if (Nearby(enemy.Location, target, radius, direction)) {
enemy.Hit(damage, random);
return true;
}
另外,在距離循環中調用了“ move()”函數,因此其行為是不可預測的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.