i Wisse, dass dies irgendwie eine Fabrik verwendet, entweder die Werksmethode oder eine abstrakte Fabrik, aber ich kann meinen Kopf wirklich nicht umwickeln. Tut mir leid, wenn dies eine Wiederholung ist. < /p>
Hier ist mein Code: < /p>
GameEngine: < /p>
Code: Select all
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
}
}