Avatar
Veganekk
Člen
Avatar
Veganekk:

Ahoj dělám hru had. Chci aby se mi had pohyboval libovolne a ne do stran jako normálně ale mám problém, že se mi ted ani nedebugne. Nevím kde mám problém :(. Děkuju za pomoc Zde je muj kod :

Game1

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace Snake_game_Projekt
{
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        Texture2D Pozadi;
        Texture2D SnakeTexture;
        Rectangle prostred;
        List<Sprite> sprites = new List<Sprite>();//List je dynam pole.
        Player player;

        public SpriteBatch SpriteBatch
        {
            get { return spriteBatch; }
            set { spriteBatch = value; }
        }

        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }

        protected override void Initialize()
        {
            base.Initialize();
        }

        protected override void LoadContent()
        {
            spriteBatch = new SpriteBatch(GraphicsDevice);
            Pozadi = Content.Load<Texture2D>("Background");
            SnakeTexture = Content.Load<Texture2D>("Snake");
            prostred = new Rectangle((graphics.PreferredBackBufferWidth - SnakeTexture.Width) / 2,
                (graphics.PreferredBackBufferHeight - SnakeTexture.Height) / 2, SnakeTexture.Width, SnakeTexture.Height);

            player = new Player(SnakeTexture, prostred, Color.White, 0.15f, sprites);
        }
        protected override void UnloadContent()
        {

        }

        protected override void Update(GameTime gameTime)
        {
            //Nacitani z klavesnice
            KeyboardState ks = Keyboard.GetState();
            player.Update(ks, gameTime);
            foreach (Sprite s in sprites)
            {
                s.Update(ks, gameTime);
            }
            //Konec
            ks = Exit(ks);
            base.Update(gameTime);
        }

        private KeyboardState Exit(KeyboardState ks)
        {
            //Ukonceni programu
            if (ks.IsKeyDown(Keys.Escape))
            {
                this.Exit();
            }
            return ks;
        }

        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);
            spriteBatch.Begin();
            for (int x = 0; x < graphics.PreferredBackBufferWidth; x += Pozadi.Width)
            {
                for (int y = 0; y < graphics.PreferredBackBufferHeight; y += Pozadi.Height)
                {
                    spriteBatch.Draw(Pozadi, new Rectangle(x, y, Pozadi.Width, Pozadi.Height), Color.White);
                }
            }
            //Vykreslovani hada
            player.Draw(spriteBatch);
            foreach (Sprite s in sprites)
                s.Draw(spriteBatch);
            spriteBatch.End();
            base.Draw(gameTime);
        }
    }
}

Sprite

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;

namespace Snake_game_Projekt
{
    class Sprite
    {
        public Texture2D Textura;
        public Vector2 Pozice;
        public Color colors;
        public double timer;
        public float SnakeSpeed = 0.15f;//rychlost hada
        public float x = MathHelper.Pi;//uhel hada
        public Rectangle Rectangle;

        public Sprite(Texture2D Textura, Rectangle rectangle, Color color)
        {
            this.Textura = Textura;
            this.Rectangle = rectangle;
            this.Pozice = new Vector2(rectangle.X, rectangle.Y);
            this.colors = color;
        }

        public Vector2 GetPozice()
        {
            return Pozice;
        }

        public Rectangle GetRectangle()
        {
            return new Rectangle((int)Pozice.X, (int)Pozice.Y, (int)Textura.Width, (int)Textura.Height);
        }

        public virtual void Update(KeyboardState ks, GameTime gameTime)
        {
            Pozice = new Vector2(Rectangle.X, Rectangle.Y);

        }

        public virtual void Draw(SpriteBatch spriteBatch)
        {
            spriteBatch.Draw(Textura, Pozice, Color.White);
        }
    }
}

Player

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;

namespace Snake_game_Projekt
{
    class Player : Sprite
    {
        public int Zivoty { get; set; }
        public float Rychlost { get; set; }
        private bool keyPressed;
        private List<Sprite> Pl;
        public Player(Texture2D textura, Rectangle rec, Color color, float Rychlo, List<Sprite> sprites)
            : base(textura, rec, color)
        {
            this.Textura = textura;
            this.Rectangle = rec;
            this.colors = color;
            this.Rychlost = Rychlo;
            this.Pl = sprites;
        }
        public override void Update(KeyboardState ks, GameTime gameTime)
        {

            //Zmena smeru hada
            if (ks.IsKeyDown(Keys.Left))
                x = (x - 0.5f*MathHelper.TwoPi) % MathHelper.TwoPi;
            else if (ks.IsKeyDown(Keys.Right))
                x = (x + 0.5f) % MathHelper.TwoPi;
            //Ochrana proti Sekanim
            timer = gameTime.ElapsedGameTime.TotalMilliseconds;

            //Pohyb hada - hlavy
            Pl[0].Pozice.X += (float)(SnakeSpeed * timer * Math.Sin(x));
            Pl[0].Pozice.Y += (float)(SnakeSpeed * timer * Math.Cos(x));

            Pl[0].Rectangle.X = (int)Pl[0].Pozice.X;
            Pl[0].Rectangle.Y = (int)Pl[0].Pozice.Y;
        }

    }
}
Editováno 7.3.2014 15:49
Odpovědět 7.3.2014 15:47
Rád se učím novým věcem. A věci co nechápu rád pochopím a naučím.
Avatar
Michal Žůrek (misaz):

poslal jsi nám při celé třídy.
1.) nikdo nemá náladu se v tom hrabat
2.) nenapsal jsi nám kde je chyba (ideálně řádek, kde ti to spadne)
3.) nenapsal jsi co je to za chybu

Pokud se ti to nevykreslí, tak to máš nejspíš celé špatně. O XNA je tu celý tutoriál, kde jsou základy popsané http://www.itnetwork.cz/csharp/monogame

Nahoru Odpovědět  ±0 7.3.2014 15:55
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Michal Žůrek (misaz)
Richard Závodný:

Nemyslím si že je to pro začátečníka zrovna dobrá odpověď. Ty si se taky nějak učil nééé?

 
Nahoru Odpovědět 7.3.2014 16:13
Avatar
Odpovídá na Richard Závodný
Michal Žůrek (misaz):

učil, ale já nemám náladu studovat 3 úplně cizí zdrojáky, když autor neuvedl ani základní potřebu - kde a co vzniklo za chybu. Tipuji že nejsem jediný kdo sice XNA rozumí (byť jen trochu), ale toto fakt ne.

Nahoru Odpovědět 7.3.2014 16:14
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Michal Žůrek (misaz)
Richard Závodný:

Chápu také na to nemám náladu ale taková surová odpověď. Alespoň napsat "Sorry tomu fakt nerozumím. ;-("

 
Nahoru Odpovědět 7.3.2014 16:17
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Richard Závodný
David Čápka:

Surová odpověď na surovou otázku - "Vůbec nevím co nefunguje, opravte mi to". Pokud svému kódu vůbec nerozumíš, tak bys měl začít asi něčím jednodušším. Pokud mu rozumíš, tak snad dokážeš popsat co ti nefunguje.

Nahoru Odpovědět  ±0 7.3.2014 16:20
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Veganekk
Člen
Avatar
Veganekk:

Problém mám v někde v pohybu. Dal jsme zde celý kod radši.
Vykreslováním. Nevím kde bych tam mohl mít chybu. A omlouvám se, že jsem nenpsal kde chybu. Myslel jsme, že jsem to nahoře popsal ale asi měl napsat přesněji kde mám problém. Pro příště se polepsím. Takže se omlouvám. Jinak mám problém když chci aby se mi had hýbal. Co mám blbě na tom pohybu ?

ve tříde Player

public override void Update(KeyboardState ks, GameTime gameTime)
        {

            //Zmena smeru hada
            if (ks.IsKeyDown(Keys.Left))
                x = (x - 0.5f*MathHelper.TwoPi) % MathHelper.TwoPi;
            else if (ks.IsKeyDown(Keys.Right))
                x = (x + 0.5f) % MathHelper.TwoPi;
            //Ochrana proti Sekanim
            timer = gameTime.ElapsedGameTime.TotalMilliseconds;

             //Odtud mi program vždy spadne.**
            //Pohyb hada - hlavy
            Pl[0].Pozice.X += (float)(SnakeSpeed * timer * Math.Sin(x));
            Pl[0].Pozice.Y += (float)(SnakeSpeed * timer * Math.Cos(x));

            Pl[0].Rectangle.X = (int)Pl[0].Pozice.X;
            Pl[0].Rectangle.Y = (int)Pl[0].Pozice.Y;

        }
Editováno 7.3.2014 17:10
Nahoru Odpovědět 7.3.2014 17:08
Rád se učím novým věcem. A věci co nechápu rád pochopím a naučím.
Avatar
Veganekk
Člen
Avatar
Veganekk:

Jinak vykresluje se mi ale pohyb mi nefunguje a vždy mi spadne :(.

Nahoru Odpovědět 7.3.2014 17:16
Rád se učím novým věcem. A věci co nechápu rád pochopím a naučím.
Avatar
Veganekk
Člen
Avatar
Veganekk:

S pohybem do stran nemám problém ale kdyz chci aby se hrřáč mohl pohybovat jak chce do všech směru tak mi to nejde :(...

Nahoru Odpovědět 7.3.2014 18:42
Rád se učím novým věcem. A věci co nechápu rád pochopím a naučím.
Avatar
Jan Vargovský
Redaktor
Avatar
Jan Vargovský:

Se mi strašne líbí, jak někdo dělá něco podle tutorialu a míchá tam své názvy s těma z tutorialu a pak se v tom ztratí. Jestli jsi to dělal sám, tak se omlouvám a ty bys to měl dokázat fixnout sám. Začni s debugem a podívej se jestli to vše dělá co má.

Hint: piš jedním jazykem a né mixem (cz x en)

 
Nahoru Odpovědět 7.3.2014 18:50
Avatar
Odpovídá na Veganekk
Luboš Běhounek (Satik):

Pokud ti to spadne, tak to spusť v debugu a koukni se, kde to spadlo, na jakém příkazu.

Nahoru Odpovědět  +1 7.3.2014 18:58
:)
Avatar
Veganekk
Člen
Avatar
Veganekk:

Tak nakonec se mi to podařilo rozhýbat jen rotace má pár much, které musím ještě nějak vyřešit. Snad jsem moc neotravoval. A díky za pomoc.

Nahoru Odpovědět 7.3.2014 19:57
Rád se učím novým věcem. A věci co nechápu rád pochopím a naučím.
Avatar
Veganekk
Člen
Avatar
Veganekk:

Jinak moc díl za pomoc :). Té chyby jsme si všiml když jsem já vůl zapomněl přidat do Listu sprites prvek v Game1 takže proto my to vyhazovalo chybu. Takže jsem neměl žádný prvek v Listu. Ale už to funguje.

Nahoru Odpovědět 7.3.2014 20:17
Rád se učím novým věcem. A věci co nechápu rád pochopím a naučím.
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 13 zpráv z 13.