Как создать экземпляры разных объектов, которые принимают одинаковые параметры?C#

Место общения программистов C#
Ответить
Anonymous
 Как создать экземпляры разных объектов, которые принимают одинаковые параметры?

Сообщение Anonymous »

Я пытаюсь сделать игру в стиле Touhou, где любой спрайт, который может стрелять пули, может снимать любую пулю, которую она дается, с перезарядкой выстрела, исходящей из пули. Но я не могу выяснить, как. < /P>

В настоящее время у меня есть мой персонаж < /code> класс, отправляющий событие в моногамскую игру, которая затем создает В твердом кодированном пуле после позиции и направления символов, с которыми они сталкиваются. При попытке сделать пулю Type Dynamic, я попытался добавить список типов Bullet в класс символов , но это может содержать только экземпляры пуль , Не тип класса.
Тогда я хотел отправить информацию в качестве аргумента события, но я не могу понять, как генерировать пулю, используя имя его класса и все еще проходите во всех его параметрах, необходимых для строительства. Я хочу функцию, которая принимает имя подкласса пули и параметры для указанной пули. способ, который хорошо разъединен, как в отдельных символах ничего не знает о пуле , которую называется, кроме имени, но все же получает длину восстановления конкретной пули.
i Знайте, что это будет каким -то образом использовать фабрику, либо фабричный метод, либо абстрактная фабрика, но я действительно не могу обернуть голову вокруг этого, извините, если это повторение. < /p>
Вот мой код: < /p>
GameEngine: < /p>
var player = playerFactory.CreateEntity(playertexture, new Vector2(Globals.WindowSize.X/2,
Globals.WindowSize.Y / 2), 0,200f) as Player;
player.SpriteEvent += PlayerEventHandler;
private void PlayerEventHandler(object sender, SpriteEventArgs args)
{
//This is where the things like bullets and any
//other sprite events are currently set to go to.
//We can subscribe different types of sprites to different event
//handlers, this was just
//to test if my sprite event was working.
//Right now, it's only subscribed to the player
//and reacts when the F key is pressed.
var player = sender as Player;
var characterArgs = args as CharacterEventArgs;
BulletManager.AddByType("A");

}
< /code>
Player: < /p>
//on keypress, check if cooldown has ended, and if it has, shoot.
if(kstate.IsKeyDown(Keys.F))
{
shotCoolDown -= (float)gameTime.ElapsedGameTime.TotalSeconds;

if (shotCoolDown < 0)
{
this.Shoot(bulletTypes[0]);
}
}

public override void Shoot(Attack bullet)
{
//Call Shoot event, send to PlayerEventHandler, And set shotCooldown
//based on bullet created
this.OnSpriteEvent(new CharacterEventArgs(){ Bullet = bullet});
shotCoolDown = BulletA.GetCoolDown;
}
< /code>
bullet: < /p>
public class BulletA(Texture2D texture, Vector2 position, float rotation, float speed) : Attack(texture, position, rotation, speed)
{
protected const float Cooldown = 500f;

public static float GetCoolDown => Cooldown;
public override void Update(GameTime gameTime)
{
// moving logic after its created
}
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... parameters
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»