Maintenant, quand j'appuie sur la barre d'espace, elle va aller à gauche ou à droite, je veux que la balle passe directement la première fois.Ensuite, quand la balle frappe un mur, bloque ou file, je veux que la balle en quelque sorte. C'est mon premier projet de jeu scolaire, c'est un jeu de pong d'une ligne.Comment déplacer la balle dans des directions différentes?
Editer: Modifier J'ai ajouté "boll_speed.X = random.Next (-1, 1);", et cela fonctionne parfaitement!
- linje = ligne
- liv = vit
- boll = balle
- Poäng = points
- Je ne pas utiliser "blockröd = blockred" en ce moment
blockgrön = blockgreen
public class Game1 : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; SpriteFont spritefont; Texture2D linje_texture; Texture2D boll_texture; Texture2D blockröd_texture; Texture2D blockgrön_texture; Texture2D gameover_texture; Rectangle linje_rect; Rectangle boll_rect; Rectangle blockröd_rect; Rectangle blockgrön_rect; Rectangle gameover_rect; Vector2 linje_speed; Vector2 boll_speed; Random random; int liv; int poang; int highscore; List<Rectangle> block = new List<Rectangle>(); bool Start = false; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.PreferredBackBufferWidth = 760; graphics.PreferredBackBufferHeight = 620; } protected override void Initialize() { linje_speed.X = 5f; boll_speed.X = boll_speed.X = random.Next(-1, 1); boll_speed.Y = 6f; liv = 3; poang = 0; random = new Random(); base.Initialize(); } protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); spritefont = Content.Load<SpriteFont>("Fonts/Myfont"); linje_texture = Content.Load<Texture2D>("Pics/linje-lång"); boll_texture = Content.Load<Texture2D>("Pics/boll"); blockgrön_texture = Content.Load<Texture2D>("Pics/block-grön"); blockröd_texture = Content.Load<Texture2D>("Pics/block-röd"); gameover_texture = Content.Load<Texture2D>("Pics/GameOver"); linje_rect = new Rectangle((Window.ClientBounds.Width - linje_texture.Width)/2, 580, linje_texture.Width, linje_texture.Height); boll_rect = new Rectangle((Window.ClientBounds.Width - boll_texture.Width)/2, 556, boll_texture.Width, boll_texture.Height); gameover_rect = new Rectangle((Window.ClientBounds.Width/2) - (gameover_texture.Width/2), (Window.ClientBounds.Height/2) - gameover_texture.Height/2, gameover_texture.Width, gameover_texture.Height); block.Add(blockgrön_rect); block.Add(blockröd_rect); for (int i = 1; i < 5; i++) { for (int g = 1; g < 13; g++) { block.Add(new Rectangle((g * 63) - 60, (i * 40), blockgrön_texture.Width, blockgrön_texture.Height)); } } } protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); if (Start == true) { boll_rect.X += (int)boll_speed.X; boll_rect.Y += (int)boll_speed.Y; } if(Start == false) { boll_rect.X = linje_rect.X + ((linje_texture.Width/2) - (boll_texture.Width/2)); } if (boll_rect.X > Window.ClientBounds.Width - boll_texture.Width || boll_rect.X < 0) boll_speed.X *= -1; if (boll_rect.Y > Window.ClientBounds.Height - boll_texture.Height || boll_rect.Y < 0) boll_speed.Y *= -1; if (boll_rect.Y > Window.ClientBounds.Height - boll_texture.Height) { liv -= 1; Start = false; boll_rect.X = (Window.ClientBounds.Width - boll_texture.Width)/2; boll_rect.Y = 556; linje_rect.X = (Window.ClientBounds.Width - linje_texture.Width)/2; linje_rect.Y = 580; } KeyboardState ks = Keyboard.GetState(); if (ks.IsKeyDown(Keys.Left)) { linje_rect.X -= (int)linje_speed.X; } else if (ks.IsKeyDown(Keys.Right)) { linje_rect.X += (int)linje_speed.X; } else if (ks.IsKeyDown(Keys.Space)) { Start = true; } if (linje_rect.X > Window.ClientBounds.Width - linje_texture.Width) linje_rect.X = (Window.ClientBounds.Width - linje_texture.Width); if (linje_rect.X < 0) linje_rect.X = 0; if (linje_rect.Intersects(boll_rect)) { boll_speed.Y *= -1; } base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.Black); spriteBatch.Begin(); if (liv > 0) { spriteBatch.Draw(linje_texture, linje_rect, Color.White); spriteBatch.Draw(boll_texture, boll_rect, Color.White); spriteBatch.DrawString(spritefont, "Liv kvar: " + liv, Vector2.Zero, Color.White); spriteBatch.DrawString(spritefont, "Points: " + poang, new Vector2(350, 0), Color.White); spriteBatch.DrawString(spritefont, "Highscore: " + highscore, new Vector2(660, 0), Color.White); foreach (Rectangle g in block) { spriteBatch.Draw(blockgrön_texture, g, Color.White); } } if (liv == 0) { spriteBatch.Draw(gameover_texture, gameover_rect, Color.White); } spriteBatch.End(); base.Draw(gameTime); } }
difficulté à ces pièces:
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
Exit();
if (Start == true)
{
boll_rect.X += (int)boll_speed.X;
boll_rect.Y += (int)boll_speed.Y;
}
if (boll_rect.X > Window.ClientBounds.Width - boll_texture.Width || boll_rect.X < 0)
boll_speed.X *= -1;
if (boll_rect.Y > Window.ClientBounds.Height - boll_texture.Height || boll_rect.Y < 0)
boll_speed.Y *= -1;
else if (ks.IsKeyDown(Keys.Space))
{
Start = true;
}
if (linje_rect.Intersects(boll_rect))
{
boll_speed.Y *= -1;
boll_speed.Y += random.Next(-100, 101)/100.0f;
boll_speed.X *= -1;
boll_speed.X += random.Next(-100, 101)/100.0f;
}
Alors quelle partie de ce code vous rencontrez des problèmes avec? – UnholySheep
La balle dans le jeu de pong change habituellement la vitesse de 'y' (ou' x', je ne suis pas sûr de l'orientation de vos pagaies) en fonction de l'endroit où elle touche la pagaie, et probablement de la vitesse de la pagaie. En outre, il semble que la même question a déjà été [répondu sur gamedev] (http://gamedev.stackexchange.com/q/4253/38920). L'auteur de cette réponse a une page d'accueil avec un jeu de démo sur [richardcarter.org] (http://richardcarter.org/). – Groo
Je peux copier tout le code, donc vous comprenez mieux. Fondamentalement, je veux que la balle aille bien la première fois. Quand j'appuie sur ESPACE au démarrage, mais cela va dans des directions différentes. Maintenant, il ne fait que monter et descendre tout le temps. Je vais regarder dans cette page! –