Hey,
Ich habe so eine Art Schiff, welches Schüsse in Mauszeigerrichtung verschießen soll. Das Klappt soweit auch alles, doch leider hatte ich einen kleinen Denkt fehler drinne, so dass je nach Mausposition im verhältnis des Ursprunges die Geschwindigkeit stark variiert.
Programmiert ist es in C# mit dem XNA framework:
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
public Shoot(Vector2 start, Vector2 mousePos)
{
this.Position = start;
this.Texture = Content_Manager.getInstance().Textures["schuss"];
origin = new Vector2(Texture.Width / 2, Texture.Height / 2);
activ = true;
direction = mousePos - Position;
angle = (float)Math.Atan2(direction.Y, direction.X); //zum drehen der bullets "laser schüsse"
//float forceX = 0; //Hier müsste dan noch etwas gemacht werden so dass die Bullets alle gleich schnell sind
//float forceY = 0;
//if (direction.X <= 0) forceX += -1f;
//if (direction.X >= 0) forceX += 1f;
//forceY = direction.X / direction.Y;
//direction = new Vector2(forceX, forceY);
}
public void Update(GameTime gameTime)
{
this.Position += direction * MOVEMENTSPEED * (float)gameTime.ElapsedGameTime.TotalSeconds * 0.005f; //Unschön und auch fehlerhaft. Aber so ähnlich sollte es aussehen
}
public void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Draw(Texture, new Rectangle((int)Position.X, (int)Position.Y, Shoot.WIDTH, Shoot.HEIGHT), null, Color.White, angle + (float)(Math.PI * 0.5), origin, SpriteEffects.None, 1);
}
|
Meine Gedanken bisher waren:
- Der Steigung eine Maximale geben. Als Beispiel 100. Mit dem umgestellten Pytagoras kommt man auf eine Fehlende Seite. // Klappt nicht :/
- Verhältnis bestimmen und um etwa 100 einpegeln lassen. (x > 100 && y > 100 dann vector*0.5 beim gegenteil *2) Klappte außer bei den Quadranten 1 und 3. (Schiff als Ursprung)
- x auf 1 setzen und y im verhältnis dazu. Will irgendwie nicht :/