Ich wollte nur ein 2d Game mit den steuerungseigenschaften von
z.B. DarkOrbit oder Spore in der Zellphase schreiben wobei ich dann auf das eigentliche Problen gestoßen bin. Und zwar nimt mein Avatar nicht den schnellsten weg zur maus sondern eher so : " [Avatarkoordinaten 0,0 Mauskoordinaten 10,20] { speedX = 1 speedY = 1 } Avatar wandert erst bis 10,10 dan bis 10,20 dadurch endsteht ein dooofer Knick "
Den eigentlichen Fehler habe ich auch schon gefunden aber ich finde keine Lösung . Meine lösungsformel die ich iergentwie nicht umsetzen konnte sah so aus : " [Avatarkoordinaten 0(y),0(x) Mauskoordinaten 10(y),20(x)]
{speedX = 1 * ( x / y ) = speedX = 2 speedY = 1 * ( y / x) = speedY = 1 }
Avatar wandert gleich bis 10,20.
Hir mein Code :
Code:
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 WindowsGame1 { public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Texture2D Map,avatar,gui_cursor; // den gui_cursor habe ich aus einem anderen Spiel geklaut :D Rectangle map_rec, avatar_rec, gui_cursor_rec, maus_rec; int x,y; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; this.Window.Title = "MyFirstMiniGame"; graphics.PreferredBackBufferWidth = 1920; graphics.PreferredBackBufferHeight = 1080; graphics.PreferMultiSampling = false; graphics.IsFullScreen = true; } protected override void Initialize() { base.Initialize(); } protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); Map = Content.Load<Texture2D>("map"); avatar = Content.Load<Texture2D>("avarar"); gc = Content.Load<Texture2D>("gui_cursor"); map_rec.Width = Map.Width; map_rec.Height = Map.Height; avatar_rec.Width = avatar.Width; avatar_rec.Height = avatar.Height; gui_cursor_rec.Width = gui_cursor.Width; gui_cursor_rec.Height = gui_cursor.Height; avatar_rec.X = 300; avatar_rec.Y = 300; } protected override void UnloadContent() { } protected override void Update(GameTime gameTime) { MouseState mause = Mouse.GetState(); gui_cursor_rec.X = mause.X; gui_cursor_rec.Y = mause.Y; /* ich habe hir zzei verschiedene mäuse 1. gui_cursor & 2. Maus damit es * im Spiel optisch besser aussieht wenn der Avatar den gui_cursor verfolgt und dann in der mitte stehen bleibt */ maus_rec.X = mause.X - 60; maus_rec.Y = mause.Y - 35; x = 5; // speed y = -5; // auch speed if (mause.LeftButton == ButtonState.Pressed) { if (maus_rec.X == avatar_rec.X && maus_rec.Y == avatar_rec.Y) { } else { if (maus_rec.X > avatar_rec.X) { avatar_rec.X = avatar_rec.X + x; } if (maus_rec.X < avatar_rec.X) { avatar_rec.X = avatar_rec.X + y; } if (maus_rec.Y > avatar_rec.Y) { avatar_rec.Y = avatar_rec.Y + x; } if (maus_rec.Y < avatar_rec.Y) { avatar_rec.Y = avatar_rec.Y + y; } } } base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(); spriteBatch.Draw(Map, map_rec, Color.White); spriteBatch.Draw(avatar, avatar_rec, Color.White); spriteBatch.Draw(gui_cursor, gui_cursor_rec, Color.White); spriteBatch.End(); base.Draw(gameTime); } } }