Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Wenn der iter das zu zeichnende Objekt wäre müsste man ihn dereferenzieren. Aber der iter ist nicht das zu zeichnende Objekt, sondern enthält es also must du über den iter drauf zugreifen.War nicht genau dafür der Dereferenzierungsoperator da oder verwechsel ich jetzt etwas
Du könntest auch aufhören, einen Iterator zu benutzen und einfach eine Range-based for-Schleife nutzen.
C-/C++-Quelltext |
|
1 2 3 4 5 |
for (auto i : projektilArray) { i.updateProjektil(); window.draw(i.rect); } |
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; } |
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; } } |
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); } } |
Alter Hase
Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy
An der Stelle mal der Hinweis den Debuger zu benutzen!
Wichtig: Lerne den Unterschied zwischen
for(auto i : iterable)
for(auto& i : iterable)
for(auto&& i : iterable)
kennen.
C-/C++-Quelltext |
|
1 |
Projektil1.Richtung = Spieler1.Richtung;
|
An der Stelle mal der Hinweis den Debuger zu benutzen!
Habe ich laufen lassen, spuckt keine Fehler aus. Programm macht trotzdem nicht, was es soll
Vorher neben dem Code ein breakpoint setzten (mit der Maus klicken).
Werbeanzeige