Diskuze: componenta v xna hází chybu!?

C# .NET .NET (C# a Visual Basic) componenta v xna hází chybu!? American English version English version

Avatar
James
Člen
Avatar
James:

vytvořil jsem si nový projekt který těď vypadá takto:

[/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 TestGame2
{
    /// <summary>
    /// This is the main type for your game
    /// </summary>
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;

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

        /// <summary>
        /// Allows the game to perform any initialization it needs to before starting to run.
        /// This is where it can query for any required services and load any non-graphic
        /// related content.  Calling base.Initialize will enumerate through any components
        /// and initialize them as well.
        /// </summary>
        protected override void Initialize()
        {
            GameComponent1 GC1 = new GameComponent1(this);

            Components.Add(GC1);

            base.Initialize();
        }

        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            // TODO: use this.Content to load your game content here
        }

        /// <summary>
        /// UnloadContent will be called once per game and is the place to unload
        /// all content.
        /// </summary>
        protected override void UnloadContent()
        {
            // TODO: Unload any non ContentManager content here
        }

        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            // Allows the game to exit
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();

            // TODO: Add your update logic here

            base.Update(gameTime);
        }

        /// <summary>
        /// This is called when the game should draw itself.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            // TODO: Add your drawing code here

            base.Draw(gameTime);
        }
    }
}
code]

//A k tomu componentu která vypadá takto:
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 TestGame2
{

    public class GameComponent1 : Microsoft.Xna.Framework.DrawableGameComponent
    {
        public Game game;

        public SpriteBatch spriteBatch;

        public Texture2D MouseTexture;

        MouseState mouseState;

        public GameComponent1(Game game)
            : base(game)
        {
            this.game = game;
        }


        public override void Initialize()
        {


            base.Initialize();
        }

        protected override void LoadContent()
        {


            MouseTexture = game.Content.Load<Texture2D>(@"graphics\mouseTexture_2");

            base.LoadContent();
        }


        public override void Update(GameTime gameTime)
        {



            mouseState = Mouse.GetState();

            base.Update(gameTime);

        }
        public override void Draw(GameTime gameTime)
        {


            game.spriteBatch.Begin();

            game.spriteBatch.Draw(MouseTexture, new Vector2(mouseState.X, mouseState.Y), Color.White);

            game.spriteBatch.End();
            base.Draw(gameTime);
        }
    }
}

k tomu mám ve složce "graphics" obrázek mouseTexture2.png
a to vše mi hází error nevíte proč???

Editováno 29.8.2013 19:55
Odpovědět 29.8.2013 19:54
Slovo nikdy znamená že cesta k cíly je pouze o něco těžší než se zdálo.
Avatar
James
Člen
Avatar
James:

ve draw c componenťe hazí chybu na to "game"

Nahoru Odpovědět 29.8.2013 19:56
Slovo nikdy znamená že cesta k cíly je pouze o něco těžší než se zdálo.
Avatar
vodacek
Redaktor
Avatar
 
Nahoru Odpovědět 29.8.2013 20:12
Avatar
James
Člen
Avatar
Odpovídá na vodacek
James:

Toto:
Error 1 'Microsoft.Xna­.Framework.Ga­me' does not contain a definition for 'spriteBatch' and no extension method 'spriteBatch' accepting a first argument of type 'Microsoft.Xna­.Framework.Ga­me' could be found (are you missing a using directive or an assembly reference?) C:\Users\james\Do­cuments\Visual Studio 2010\Projects\Tes­tGame2\TestGa­me2\TestGame2\Ga­meComponent1.cs 58 18 TestGame2

Nahoru Odpovědět 29.8.2013 20:26
Slovo nikdy znamená že cesta k cíly je pouze o něco těžší než se zdálo.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na James
Jan Vargovský:

XNA nedělám, ale nevím jestli game a spriteBatch jsou nějaké svázané objekty :) ale zkus zavolat v té metodě draw vše ale bez té předpodny té třídy Game.

EDIT: po pár googlování to asi nějakou návaznost má, ale nikde nepřiřazuješ ten spriteBatch k tomu game, tak možná bude někde chyba v tom.

Editováno 29.8.2013 20:34
 
Nahoru Odpovědět 29.8.2013 20:32
Avatar
James
Člen
Avatar
Odpovídá na Jan Vargovský
James:

No co sem chťel vykreslit se nevikreslí ale místo toho přes celé okno šedá barva !?

Nahoru Odpovědět 29.8.2013 20:41
Slovo nikdy znamená že cesta k cíly je pouze o něco těžší než se zdálo.
Avatar
James
Člen
Avatar
James:

to "šedá barva" jsem vykresloval bez toho "game"

Nahoru Odpovědět 29.8.2013 20:52
Slovo nikdy znamená že cesta k cíly je pouze o něco těžší než se zdálo.
Avatar
Odpovídá na James
Jiří Košata (kosata50):

Ve třídě "Game1" nastav "spriteBatch" jako public, pak se k němu dostaneš i z jiné komponenty. V té komponentě ber jako parametr v kontruktoru "Game1" místo "Game" a taky změň datový typ proměnné "game" v komponentě. Tohle by ti mohlo pomoct: http://www.itnetwork.cz/…do-komponent :)

 
Nahoru Odpovědět 29.8.2013 21:19
Avatar
Jakub Lásko[Saarix]:

Já osobně když v XNA dělám novou class a v ní metodu Draw, tak dám do parametru SpriteBatch spriteBatch. Pak když jsem v Game, tak v metodě Draw jen použiju komponenta.Draw(spri­teBatch);

Nahoru Odpovědět  +2 30.8.2013 19:15
Č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 9 zpráv z 9.