Witam, mam problem z typem obiektu.
Stworzyłem sobie 2 klasy:
public class CSprite { /* ... */ }
public class CAnimation : CSprite { /* ... */ }
Powyższa klasa reprezentuje obrazek. Potrzebuję odróżniać je od siebie, gdyż funkcja Draw()
w dwóch przypadkach przybiera różne parametry.
(Do działania animacji potrzebuję dodatkowo przesłać informacje o czasie)
Oto jeden z konstruktorów klasy reprezentującej przeciwnika w grze:
public CEnemy(CSprite sprite, int health, float speed, int reward, int damage, CStage stage)
: this()
{
this.m_sprite = new CSprite(sprite);
this.m_health = m_maxhealth = health;
this.m_speed = speed;
this.m_stage = stage;
this.m_sprite.m_position = stage.Way[0];
this.m_target = stage.Way[1];
this.m_reward = reward;
this.m_damage = damage;
}
this.m_sprite
to oczywiście obrazek reprezentujący przeciwnika na ekranie. Gdy inicjuję konstruktor za pomocą obiektu CSprite
, nie ma problemów, jednak gdy chcę to zrobić za pomocą obiektu CAnimation
, konstruktor okraja go do CSprite
...
Nie wiem jak zrobić, by obiekt mógł być typu CSprite
, lub CAnimation
.
Oto przykład
CEnemy przeciwnik = new CEnemy( new CAnimation animacja(), 1, 1f, 1, 1, new CStage()
if (przeciwnik.m_sprite.GetType() == typeof(CAnimation) ) //FALSE
return;
Próbowałem mieszać w konstruktorach, pisać funkcję Copy(), na wiele różnych sposobów, ale nie mam pojęcia jak to zrobić. Trzeba rzutować obiekt?