Diskuze: Dědění vlastností

C# .NET .NET (C# a Visual Basic) Dědění vlastností American English version English version

Avatar
Petr Nymsa
Redaktor
Avatar
Petr Nymsa:

Narazil jsem na něco, při čem jsem zjistil, že asi úplně nevím jak je to s děděním vlastností. Ukážu přímo příklad (je to z MonoGame resp. XNA)

public abstract class HitableObject
    {
        public Rectangle Bounds { get; protected set; }

        public HitableObject(Rectangle rectangle)
        {
            this.Bounds = rectangle;
        }

        public bool CheckCollision(Rectangle rect)
        { return this.Bounds.Intersects(rect); }
    }

Rectangle je tedy dostupný, ale set by mělo být privátní. Jde mi o to abych ho mohl editovat i v potomcích. Mám dále třídu GameObject která dědí od HitableObject a je také abstraktní, přidává dvě metody a Texturu.

/// <summary>
    /// Obecný herní objekt
    /// </summary>
    public abstract class GameObject : HitableObject
    {
        protected Texture2D texture;
        public GameObject(Texture2D texture, Rectangle rectangle)
            : base(rectangle)
        {
            this.texture=texture;

        }
        public abstract void Update(GameTime gameTime);


        public abstract void Draw(BetterSpriteBatch spriteBatch);
    }

A zde už místo s porblémem

/// <summary>
   /// Třída představující střelu
   /// </summary>
   public class Bullet : GameObject
   {
       float alpha;
       float speed;
       public Bullet(Texture2D texture, Rectangle rectangle, float alpha,float speed)
           : base(texture, rectangle)
       {
           this.alpha = alpha;
           this.speed = speed;

       }

       public override void Update(GameTime gameTime)
       {
           Bounds.X += (int)(Math.Sin(alpha) * speed);
           Bounds.Y-= (int)(Math.Cos(alpha) * speed);
       }

       public override void Draw(BetterSpriteBatch spriteBatch)
       {
           spriteBatch.Draw(texture, Bounds, Color.White);
       }
   }

Píše mi to že nelze modifikovat, jelikož se nejedná o proměnnou. Co s tím ? Co mi uniklo ? Díky :)

Odpovědět 10.5.2013 19:05
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Petr Nymsa
Redaktor
Avatar
Petr Nymsa:

Ještě dodám, například přepsání na nový Rectangle funguje, proč tedy nemůžu editovat X a Y ?

Editováno 10.5.2013 19:08
Nahoru Odpovědět 10.5.2013 19:08
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Luboš Běhounek (Satik):

Protože Rectangle je struct.

Struct se chová jinak než třída, když ho někam předáváš, tak se neposílá reference na něj, ale přímo se kopírují jeho hodnoty, doporučuju si najít a nastudovat rozdíly mezi class a struct, občas to (a věci, které z těch rozdílných vlastností vyplývají) dokáže tochu zmást.

Budeš muset přiřadit vždy celý nový Rectangle, když budeš chtít měnit nějakou jeho vlastnost.

Editováno 10.5.2013 19:20
Nahoru Odpovědět  +1 10.5.2013 19:19
:)
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Petr Nymsa:

Aha, no struktury znám ale nepoužívám je. S tím překopírováním mě to také napadlo. No asi to nijak nevylepším :D. Díky :)

Nahoru Odpovědět 10.5.2013 19:41
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Empty
Člen
Avatar
Odpovídá na Petr Nymsa
Empty:

Ahoj, jestli se můžu zeptat na čem robíš? Má to být 2D hra?
A s tim to se OMLOUVÁM za dnešní odpoledne - viz.diskuse o mém webu :-)

 
Nahoru Odpovědět 10.5.2013 19:52
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Empty
Petr Nymsa:

Ano vznikne z toho jakási 2D hra. Je to taková roční závěrečná práce do školy, já si vybral vytvoření jednoduché 2D hry, spíše za účelem vytvoření návrhu "jednoduchého enginu", pokusím se vytvořit i nějakou AI nepřátel apod.

Nahoru Odpovědět 10.5.2013 20:18
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Empty
Člen
Avatar
Odpovídá na Petr Nymsa
Empty:

Tak to držím palce, ať se daří! :-)

 
Nahoru Odpovědět 10.5.2013 20:19
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.