IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Petr Nymsa
Tvůrce
Avatar
Petr Nymsa:10.5.2013 19:05

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
Tvůrce
Avatar
Petr Nymsa:10.5.2013 19:08

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:10.5.2013 19:19

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
10.5.2013 19:19
https://www.facebook.com/peasantsandcastles/
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Petr Nymsa:10.5.2013 19:41

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:10.5.2013 19:52

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
Tvůrce
Avatar
Odpovídá na Empty
Petr Nymsa:10.5.2013 20:18

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:10.5.2013 20:19

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.