Du könntest auch aufhören, einen Iterator zu benutzen und einfach eine Range-based for-Schleife nutzen.
OKay, bei mir sieht der Code jetzt so aus:
|
C-/C++-Quelltext
|
1
2
3
4
5
|
for (auto i : projektilArray)
{
i.updateProjektil();
window.draw(i.rect);
}
|
Ist das so richtig?
Das Programm startet wieder (diesmal ohne Error
![:thumbsup:](wcf/images/smilies/thumbsup.png.pagespeed.ce.6WerjztiI8.png)
) und scheint erstmal so zu funktionieren
ABER wenn ich nun die Pfeiltasten drücke (er also rote Laser, die durch rote Vierecke dargestellt werden sollen, schießen soll, ändert er das Sprite, aber schießen tut er nichts ... und es scheint alles deutlich langsamer zu laufen
Hier nochmal alles relevante dafür:
main.cpp:
(Ich weiß der Code ist noch etwas unübersichtlich und vieles erstmal nur provisorisch ausgeklammert ... das gehe ich dann an, wenn es so läuft, wie es soll
![:D](wcf/images/smilies/biggrin.png.pagespeed.ce.UPFXer8Yu2.png)
)
|
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
// TheBindingOfZyklop.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <SFML/Graphics.hpp> //Einbinden der SFML Lybary
#include "Schablone.hpp"
#include "player.hpp"
#include "projektil.hpp"
using namespace std;
#include <iostream>
#include <vector>
int main()
{
//Fenster erstellen mit x=800, y=600
sf::RenderWindow window(sf::VideoMode(800, 600), "TBoZ");
//Spielertextur laden
sf::Texture texturePlayer;
texturePlayer.loadFromFile("TexturePlayer.png");
sf::Sprite spritePlayer(texturePlayer);
//spritePlayer.setPosition(window.getSize().x / 2, window.getSize().y / 2); //Sprite in der Mitte des Bildschirms platzieren
//spritePlayer.setTextureRect(sf::IntRect(17 * 32, 0, 32, 32));
//Spieler erstellen
class CPlayer Spieler1;
Spieler1.sprite.setTexture(texturePlayer);
//Projektil Vektor Array erstellen
vector<CProjektil>::iterator iter;
vector<CProjektil> projektilArray;
class CProjektil Projektil1; //Projektil erstellen
//Main Loop!
do
{
window.clear(); //Fenster resetten
window.draw(Spieler1.sprite); //Spieler "spawnen"
//Update Player
Spieler1.updatePlayer();
Spieler1.updateMovement();
Spieler1.updateAttack();
//Projektil abfeuern
if ((sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) || (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) || (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) || (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)))
{
Projektil1.rect.setPosition(Spieler1.rect.getPosition()); //Projektil bei Spieler spawnen
Projektil1.Richtung = Spieler1.Richtung;
projektilArray.push_back(Projektil1); //Projektil in Array verfrachten
}
//Projektile anzeigen
//int i = 0;
/*for (iter = projektilArray.begin(); iter != projektilArray.end(); ++iter);
{
//projektilArray[counter].updateProjektil();
//window.draw(projektilArray[counter].rect);
//counter++;
iter->updateProjektil();
window.draw(iter->rect);
}*/
for (auto i : projektilArray)
{
i.updateProjektil();
window.draw(i.rect);
}
window.display();
} while (!sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)); //ESC beendet Programm
return 0;
}
|
player.cpp:
|
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
|
#include "stdafx.h"
#include <SFML/Graphics.hpp>
#include "player.hpp"
CPlayer::CPlayer()
{der Übersichtlichkeit halber entfernt}
void CPlayer::updatePlayer()
{
sprite.setPosition(rect.getPosition());
}
void CPlayer::updateMovement()
{ der übersichtlichkeit halber entfernt}
void CPlayer::updateAttack()
{
//Angriff nach RECHTS
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) //Spieler drückt RECHTE Pfeiltaste)
{
sprite.setTextureRect(sf::IntRect(2 * 32, 0, 32, 32)); //Sprite anpassen/ändern
Richtung = 1; //Richtung festlegen (Werte siehe Schablone.hpp)
}
//Angriff nach LINKS
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) //Spieler drückt LINKE Pfeiltaste
{
sprite.setTextureRect(sf::IntRect(9 * 32, 0, 32, 32));
Richtung = 2;
}
//Angriff nach UNTEN
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) //Spieler drückt UNTERE Pfeiltaste
{
sprite.setTextureRect(sf::IntRect(16 * 32, 0, 32, 32));
Richtung = 3;
}
//Angriff nach OBEN
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) //Spieler drückt OBERE Pfeiltaste
{
sprite.setTextureRect(sf::IntRect(23 * 32, 0, 32, 32));
Richtung = 4;
}
}
|
projektil.cpp:
|
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
|
#include "stdafx.h"
#include <SFML/Graphics.hpp>
#include "projektil.hpp"
//Konstruktor
CProjektil::CProjektil()
{
rect.setSize(sf::Vector2f(5, 10));
rect.setFillColor(sf::Color::Red);
}
void CProjektil::updateProjektil()
{
if (Richtung == 1) //Projektil nach RECHTS
{
rect.move(m_Projektilgeschwindigkeit,0);
}
if (Richtung == 2) //Projektil nach LINKS
{
rect.move(-m_Projektilgeschwindigkeit,0);
}
if (Richtung == 3) //Projektil nach UNTEN
{
rect.move(0,m_Projektilgeschwindigkeit);
}
if (Richtung == 4) //Projektil nach OBEN
{
rect.move(0,-m_Projektilgeschwindigkeit);
}
}
|