Я пытаюсь сделать игру в стиле 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
Как создать экземпляры разных объектов, которые принимают одинаковые параметры? ⇐ C#
Место общения программистов C#
1738923476
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
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79420429/how-to-create-instances-of-different-objects-that-take-same-parameters[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия