So geschafft, mein Fighter schiesst jetzt, allerdings immer nur ein Projektil. Wenn ich wieder Space drücke, wird das Projektil neu erstellt und das vorige verschwindet, bevor es seine max. Reichweite erreicht hat.
Ich benötige also einen Container für meine Projektilobjekte.
Ich habe versucht es mit einem dyn. Array zu lösen, das hat aber nicht geklappt.
Vielleicht könnt ihr mir noch Tipps geben, ich habe versucht meine Vorgehensweise zu kommentieren.
|
C-/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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#include <SFML/Graphics.hpp>
#include "starship.h"
#include "projectile.h"
int main()
{
sf::RenderWindow App(sf::VideoMode(800, 600, 32), "SFML-Type");
sf::Image ImageFighter;
ImageFighter.LoadFromFile("fighter.png");
sf::Image ImageProjectile;
ImageProjectile.LoadFromFile("bullet.png");
CStarship fighter(ImageFighter, 180, 10, (App.GetHeight()-ImageFighter.GetHeight())/2);
//Hier wird ein Projektil, namens laser, erzeugt
CProjectile laser(ImageProjectile, 800, 500);
//Hier wird ein Array mit 10 Projektilen erzeugt
//CProjectile *arr = new CProjectile[10];
//Hier wird das Array mit Projektilen, namens laser, gefüllt
/*
for(int i=0; i<10; ++i)
{
arr[i] = laser;
}
*/
while(App.IsOpened())
{
sf::Event mainEvent;
while(App.GetEvent(mainEvent))
{
if(mainEvent.Type == sf::Event::Closed)
{
App.Close();
}
}
App.Clear(sf::Color(0,0,0));
fighter.Draw(App);
//ab hier müsste irgendwie laser mit arr[i] ersetzt werden, und i bei jedem
//Betätigen der Space-Taste hochgezählt werden (bis i=10)
if(App.GetInput().IsKeyDown(sf::Key::Space))
{
laser.setStartPosition(fighter.getXShip()+142, fighter.getYShip()+38);
laser.Fire(App);
}
laser.Update(App);
laser.Draw(App);
//bis hierhin laser mit arr[i] ersetzen
App.Display();
}
//Hier wird das Array wieder gelöscht
//delete[] arr;
return 0;
}
|
Gruß, NEUMee...