2012-01-22 5 views
0

나는 게임을하고 있는데, 우주선은 좌우로 눌러서 움직이기로되어있다. 불행히도, 이것은 잘 작동하지 않습니다. 여기에 내가 생각하는 코드가 있습니다. 나머지가 필요하면 그냥 물어보십시오.스프라이트가 움직이지 않는다

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; 
using Microsoft.Xna.Framework.Net; 
using Microsoft.Xna.Framework.Storage; 

namespace thedodger 
{ 
/// <summary> 
/// This is the main type for your game 
/// </summary> 
public class Game1 : Microsoft.Xna.Framework.Game 
{ 
    GraphicsDeviceManager graphics; 
    SpriteBatch spriteBatch; 
    int scorevalue = 0; 
    SpriteFont font; 

    List<gameObject> objectList = new List<gameObject>(); 
    Random rand = new Random(1); 
    Asteroid asteroid; 
    public static int screenHeight = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height; 
    public static int screenWidth =GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width; 
    int asteroidCount = 0; 
    Player player = new Player(); 


    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() 
    { 
     // TODO: Add your initialization logic here 

     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); 
     font = Content.Load<SpriteFont>("font"); 


     gameObject.texture = Content.Load<Texture2D>("asteroid"); 
     Player.texture = Content.Load<Texture2D>("EnemyShip005"); 


     // 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) 
    { 
     scorevalue++; 

     player.Update(gameTime); 

     if (rand.Next(0, 8) == 2 && asteroidCount < 50) 
     { 
      for (int i = 0; i < 5; i++) 
      { 
       asteroid = new Asteroid(rand.Next(32,screenWidth)); 
       objectList.Add(asteroid); 
       asteroidCount++; 


      } 
     } 

     foreach (Asteroid asteroid in objectList) 
     { 
      asteroid.Update(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 
     spriteBatch.Begin(); 
     spriteBatch.DrawString(font, "Score: " + scorevalue, new Vector2(5, 5), Color.White); 
     foreach (Asteroid asteroid in objectList) 
     { 

      asteroid.Draw(spriteBatch); 
     } 
     player.Draw(spriteBatch); 
     spriteBatch.End(); 



     base.Draw(gameTime); 
    } 
} 
} 



using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
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; 
using Microsoft.Xna.Framework.Net; 
using Microsoft.Xna.Framework.Storage; 

namespace thedodger 
{ 

class Player 
{ 
    public static Texture2D texture; 

    int xPos = 100; 
    int yPos = 100; 

    public void Draw(SpriteBatch spriteBatch) 
    { 
     spriteBatch.Draw(texture, new Rectangle(xPos,yPos,75,59), Color.White); 
    } 

    public void Update(GameTime gameTime) 
    { 
     KeyboardState keyboard = new KeyboardState(); 

     if (keyboard.IsKeyDown(Keys.Left)) 
     { 
      xPos--; 
     } 
     if (keyboard.IsKeyDown(Keys.Right)) 
     { 
      xPos++; 
     } 
    } 
} 

} Player.Update에서

+0

전혀 움직이지 않습니까? 아니면 그냥 천천히 움직이고 있다고 말하는 것입니까? 천천히 움직이는 것이 불만이라면,'xPos -;'를'xPos - = 10; '으로 변경해보십시오. –

답변

7

, 당신은 new KeyboardState()하고있는 -이 당신에게 빈 키보드 상태 개체를주고있다 생각합니다. 대신 Keyboard.GetState()을 사용해보세요.

+0

Blorgbeard – user1162850

관련 문제