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
coolomboc
Člen
Avatar
coolomboc:9.11.2013 15:54

Ahojte chtěl bych se zeptat jestli jde v C# sdílet promněnnou mezi třídami


class a class b
{ {
public float f = 0.5f; console.write­line(f);
} }
předem děkuji za odpověď

 
Odpovědět
9.11.2013 15:54
Avatar
coolomboc
Člen
Avatar
coolomboc:9.11.2013 15:56

class a------------------------------ class b
{-------------------------------------{
public float f = 0.5f;----------------console.write­line(f);
}-------------------------------------}

omlouvám se teď je to správně

 
Nahoru Odpovědět
9.11.2013 15:56
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na coolomboc
Jan Vargovský:9.11.2013 15:58

Když jí uděláš jako veřejnou a statickou, tak jí klidně můžeš sdílet. Ale je to takové prasácké řešení, zkus nastínit více problém a my ti poradíme lépe.

 
Nahoru Odpovědět
9.11.2013 15:58
Avatar
Paradise
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Paradise:9.11.2013 16:05

Podle čeho usuzuješ, že je to prasácké? Nechci nijak rýpat, jen mě to zajímá.

 
Nahoru Odpovědět
9.11.2013 16:05
Avatar
hypnozc
Člen
Avatar
hypnozc:9.11.2013 16:09

Tak já vím minimálně o dvou možnostech:

  1. udělej si tuto proměnnou statickou (bude patřit třídě, ne instanci). Pak tuto proměnou budeš nastavovat:
Class A
{
public static float f { get; set; }
}
Class B
{
ClassA.f = 0.5f;
}

nebo

  1. passovat data přes parametr:
ClassA
{
float f;
public ClassA()
{
ClassB NovaTridaB = new ClassB(f);
}
}
Class B
float f;
public ClassB(int parametr)
{
f = 0.5f;
}
{
}
Editováno 9.11.2013 16:10
Nahoru Odpovědět
9.11.2013 16:09
Schopný programátor si štěrbinu vždy najde...
Avatar
Kit
Tvůrce
Avatar
Odpovídá na coolomboc
Kit:9.11.2013 16:12

Nejlépe to uděláš asi tak, že ji vytvoříš jako objekt, který předáš konstruktorům obou tříd.

Ty tvé kreace jsou pro mne poněkud nepochopitelné. Čeho chceš dosáhnout?

Nahoru Odpovědět
9.11.2013 16:12
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Paradise
Jan Vargovský:9.11.2013 16:13

V tom, že by ty třídy byly navzájem závislé. To už bych si radši udělal strukturu/třídu s takovými daty a předal jí oboum těm třídám, které to budou využívat. Ale jak říkám, záleží na problému. Když mi řekne že je to class1 a class2 tak z toho nic nemám...

Editováno 9.11.2013 16:15
 
Nahoru Odpovědět
9.11.2013 16:13
Avatar
Kit
Tvůrce
Avatar
Odpovídá na hypnozc
Kit:9.11.2013 16:16

Podle původní ukázky soudím, že coolomboc vůbec nepotřebuje to, oč žádá. Raději bych počkal, až nám to blíže specifikuje.

Nahoru Odpovědět
9.11.2013 16:16
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
coolomboc
Člen
Avatar
coolomboc:9.11.2013 16:45

Přesněji řečeno potřebuji když autonarazí do překážky aby se nějak porovnaly hodnoty pozic mám totiž dvě třídy jednu pro auto a druhou pro překážku díky moc za ochotu

 
Nahoru Odpovědět
9.11.2013 16:45
Avatar
coolomboc
Člen
Avatar
coolomboc:9.11.2013 16:46

Jsem i schopný sdílet zdrojový kód

 
Nahoru Odpovědět
9.11.2013 16:46
Avatar
Kit
Tvůrce
Avatar
Odpovídá na coolomboc
Kit:9.11.2013 17:04

Použij třídu Vector2, umí i počítat vzdálenosti.

Nahoru Odpovědět
9.11.2013 17:04
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
coolomboc
Člen
Avatar
coolomboc:9.11.2013 17:07

Ano ale neumím porovnat hodnoty z těch dvou tříd a ano použivám vector2

 
Nahoru Odpovědět
9.11.2013 17:07
Avatar
coolomboc
Člen
Avatar
coolomboc:9.11.2013 17:14

Tady je ten zdroják a """""hra""""" :D

 
Nahoru Odpovědět
9.11.2013 17:14
Avatar
coolomboc
Člen
Avatar
coolomboc:9.11.2013 17:15
public class Car : Microsoft.Xna.Framework.DrawableGameComponent
    {

        public Texture2D car;
        private Game game;
        public Vector2 c = new Vector2(150, 0);
        public KeyboardState key;
        private float rotation = 0.0f;



        public Car(Game game)
            : base(game)
        {
            this.game = game; // TODO: Construct any child components here
        }

        /// <summary>
        /// Allows the game component to perform any initialization it needs to before starting
        /// to run.  This is where it can query for any required services and load content.
        /// </summary>
        public override void Initialize()
        {
            // TODO: Add your initialization code here

            base.Initialize();
        }

        protected override void  LoadContent()
        {
        car = game.Content.Load<Texture2D>(@"graphics\car");
            base.LoadContent();
        }


        /// <summary>
        /// Allows the game component to update itself.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        public override void Update(GameTime gameTime)
        {

            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();
            key = Keyboard.GetState();


            // TODO: Add your update code here

            if (key.IsKeyDown(Keys.Left))
            {
                c.X--; c.X--;
                rotation = rotation - 0.02f;

            }else
                if (rotation < 0)
                {
                    rotation = rotation + 0.025f;
                    c.X--;
                }





            if (key.IsKeyDown(Keys.Right))
            {
                c.X++;c.X++;
                rotation = rotation + 0.02f;
            } else
                if (rotation > 0)
                {
                    rotation = rotation - 0.025f;
                    c.X++;
                }

            base.Update(gameTime);
        }

        private void Exit()
        {
            throw new NotImplementedException();
        }




        public override void Draw(GameTime gameTime)
        {
            game.spriteBatch.Begin();
            game.spriteBatch.Draw(car, new Vector2(c.X, 400), null, Color.White, rotation, new Vector2(car.Width / 2, car.Height / 2), 1, 0, 0);
            game.spriteBatch.End();
            base.Draw(gameTime);
        }


    }
}
Editováno 9.11.2013 17:38
 
Nahoru Odpovědět
9.11.2013 17:15
Avatar
Kit
Tvůrce
Avatar
Odpovídá na coolomboc
Kit:9.11.2013 17:19

Máš na to statickou metodu

float vzdalenost = Vector2.Distance(auto.pozice, zeď.pozice);

Pokud však jen vyhodnocuješ kolizi, použij raději

float vzdalenostNaDruhou = Vector2.DistanceSquared(auto.pozice, zeď.pozice);

Je podstatně rychlejší.

Nahoru Odpovědět
9.11.2013 17:19
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
coolomboc
Člen
Avatar
coolomboc:9.11.2013 17:20
public class Bloky : Microsoft.Xna.Framework.DrawableGameComponent
    {
        private Game game;
        public Random rand = new Random();
        public bool preky = false;
        public bool prekya = true;
        public bool prekyb = false;
        public bool prekyc = false;
        public int rnd=0;
        public Texture2D prekazka, prekazkaa, prekazkab, prekazkac;
        public Vector2 pc  = new Vector2(0, -50);
        public Vector2 pb = new Vector2(0, -50);
        public Vector2 pa = new Vector2(0, -50);
        public Vector2 p  = new Vector2(0, -50);
        public float f = 1.0f;



        public Bloky(Game game)
            : base(game)
        {
            this.game = game;// TODO: Construct any child components here
        }

        /// <summary>
        /// Allows the game component to perform any initialization it needs to before starting
        /// to run.  This is where it can query for any required services and load content.
        /// </summary>
        public override void Initialize()
        {
            // TODO: Add your initialization code here

            base.Initialize();
        }

        protected override void LoadContent()
        {
            prekazka = game.Content.Load<Texture2D>(@"graphics\prekazka");
            prekazkac = game.Content.Load<Texture2D>(@"graphics\prekazka");
            prekazkab = game.Content.Load<Texture2D>(@"graphics\prekazka");
            prekazkaa = game.Content.Load<Texture2D>(@"graphics\prekazka");
            base.LoadContent();
        }
        /// <summary>
        /// Allows the game component to update itself.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        public override void Update(GameTime gameTime)
        {
            // TODO: Add your update code here

            if (p.Y > 600)
                p.Y = -50;
            if (pa.Y > 600)
                pa.Y = -50;
            if (pb.Y > 600)
                pb.Y = -50;
            if (pc.Y > 600)
                pc.Y = -50;



            if (f < 12)
                f = 0.001f + f;
            int rnd = rand.Next(0, 2000);
            switch (rnd)
            {
                case 0: preky = true;
                    break;
                case 500: prekya = true;
                    break;
                case 1000: prekyb = true;
                    break;
                case 1500: prekyc = true;
                    break;
            }

            if (preky == true)
            {
                p.Y += f;
            }

            if (prekya == true)
            {
                pa.Y += f;
            }

            if (prekyb == true)
            {
                pb.Y += f;
            }

            if (prekyc == true)
            {
                pc.Y += f;
            }


            base.Update(gameTime);
        }


        public override void Draw(GameTime gameTime)
        {
            game.spriteBatch.Begin();
            game.spriteBatch.Draw(prekazka, new Vector2(0, p.Y), Color.White);
            game.spriteBatch.Draw(prekazkaa, new Vector2(100, pa.Y), Color.White);
            game.spriteBatch.Draw(prekazkab, new Vector2(200, pb.Y), Color.White);
            game.spriteBatch.Draw(prekazkac, new Vector2(300, pc.Y), Color.White);
            game.spriteBatch.End();
            base.Draw(gameTime);
        }






    }
}
Editováno 9.11.2013 17:37
 
Nahoru Odpovědět
9.11.2013 17:20
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na coolomboc
David Hartinger:9.11.2013 17:37

To ti nepřijde divné sem ten zdroják takhle vložit a to dokonce 2x zasebou? POUŽIJ TLAČÍTKO "VLOŽIT ZDROJOVÝ KÓD".

Nahoru Odpovědět
9.11.2013 17:37
New kid back on the block with a R.I.P
Avatar
Odpovídá na coolomboc
Zdeněk Pavlátka:9.11.2013 17:41

Co takhle to vkládat jako kód.

Nahoru Odpovědět
9.11.2013 17:41
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na coolomboc
Jan Vargovský:9.11.2013 17:43

To chceš řešit kolize? To se řeší o úroveň výš (alespoň já bych to tak řešil, v XNA nedělám, tak třeba se to řeší jinak) v nějakém kontroleru, který spravuje všechny ty prvky.

 
Nahoru Odpovědět
9.11.2013 17:43
Avatar
coolomboc
Člen
Avatar
Odpovídá na David Hartinger
coolomboc:9.11.2013 17:45

Omlouvám se jsem strašný trolík a to tlačítko nefungovalo a stydím se za sebe

Editováno 9.11.2013 17:47
 
Nahoru Odpovědět
9.11.2013 17:45
Avatar
Odpovídá na coolomboc
Jakub Lásko[Saarix]:9.11.2013 18:10

Vector umí porovnávat vzálenosti, tak to přes ty 2 vektory můžeš porovnat, nebo to také lze udělat skrze rectangle.

btw. vektory máš ve třídách veřejné, tak není problém je v Game1 porovnat.

Nahoru Odpovědět
9.11.2013 18:10
Časem je vše možné.
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 21 zpráv z 21.