Du bist nicht angemeldet.

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

LsFan

Frischling

  • »LsFan« ist der Autor dieses Themas

Beiträge: 29

Beruf: Der Böse Admin sein xD

  • Private Nachricht senden

1

07.04.2013, 12:50

C++ Schusslöcher erstellen. HILFE!

Hallo,

ich bin neu bei der C++ programmierung, habe mir aber schon mal ein paar kleine Games mit SFML erstellt. Ich arbeite gerade an einem Zeitvertreiben-Spiel. D.H.: Man hat im 600 x 600 großen Fenster einen Blauen Hintergrund und einen Roten Zeilpunkt (Name: Player, Art: CircleShape). Dann Hab ich noch ensprechent ein Schussloch (Name: Loch, Art: CircleShape) deklariert:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
CircleShape Player(5); 
CircleShape Loch(Player); 
Player.setFillColor(Color(200,0,0)); 
Player.setOutlineThickness(2); 
Player.setOutlineColor(Color::Black); 
Player.setOrigin(2.5,2.5); 
Player.setPosition(300,300); 
Loch.setFillColor(Color(227,255,255)); 
Loch.setOutlineThickness(5); 
Loch.setOutlineColor(Color(100,100,100)); 
Loch.setOrigin(2.5,2.5);

Man kann "Player" auch bewegen:

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
float px = Player.getPosition().x; 
float py = Player.getPosition().y; 
if(Keyboard::isKeyPressed(Keyboard::Left)) 
{ 
if( px <= -10) 
{ 
px = Window.getSize().x + 10; 
} 
else 
{ 
px = px - 0.1; 
} 
} 
else if(Keyboard::isKeyPressed(Keyboard::Right)) 
{ 
if(px >= Window.getSize().x + 10) 
{ 
px = -10; 
} 
else 
{ 
px = px + 0.1; 
} 
} 
else if(Keyboard::isKeyPressed(Keyboard::Up)) 
{ 
if(py <= -10) 
{ 
py = Window.getSize().y + 10; 
} 
else 
{ 
py = py - 0.1; 
} 
} 
else if(Keyboard::isKeyPressed(Keyboard::Down)) 
{ 
if(py >= Window.getSize().y +10) 
{ 
py = -10; 
} 
else 
{ 
py = py + 0.1; 
} 
} 
Player.SetPosition(px,py);

Also:
Wie mache ich es, dass wenn ich SPACE drücke, ein NEUES Loch erzeugt wird und an die Koordinate von "Player" gesetzt wird. Im Prinzip so, als könnte man dann Per SPACEBAR immer neue Schusslöcher erzeugen. Den Anfang hab ich Schon:

C-/C++-Quelltext

1
2
3
4
if(Keyboard::isKeyPressed(Keyboard::Space)) 
{ 
Loch.setPosition(px,py); 
}

Wär echt nett wenn mir da jemand helfen könnt. :)

PS: Warscheinlich ist mein Code ranzig --> Bin aber ja noch Anfänger. :D
(\ /) | Dies ist Hase.
(^.^) | <-- Bitte kopiere Hase in deine Signatur
(*_*) | und hilf ihm, die Weltherrschaft an sich zu reißen.

2

07.04.2013, 13:52

Du darfst nicht nur ein Loch-Objekt haben, sondern benötigst mehrere. Das ist ein klassischer Fall für einen Container, wie std::vector. Ich hoffe du hast irgend ein Buch, in dem du so etwas nachlesen kannst, man findet natürlich auch viele Tutorials im Internet, aber möglicherweise verwirren die dich mehr, als dass sie dir etwas beibringen. Kannst du denn schon mit Array umgehen? Wenn ja, ist der Umstieg auf Vektoren eigentlich recht leicht.

Vielleicht hilft das hier:
http://www.codeguru.com/cpp/cpp/cpp_mfc/…ctor-Part-1.htm
http://en.cppreference.com/w/cpp/container/vector
Lieber dumm fragen, als dumm bleiben!

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

3

07.04.2013, 14:47

Wie mache ich es, dass wenn ich SPACE drücke, ein NEUES Loch erzeugt wird
Logischerweise mit "new CircleShape". ;-)

LsFan

Frischling

  • »LsFan« ist der Autor dieses Themas

Beiträge: 29

Beruf: Der Böse Admin sein xD

  • Private Nachricht senden

4

08.04.2013, 16:12

oh aber wie gebe ich dem circleshape einen name um parameter und position zuzuweisen???
(\ /) | Dies ist Hase.
(^.^) | <-- Bitte kopiere Hase in deine Signatur
(*_*) | und hilf ihm, die Weltherrschaft an sich zu reißen.

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

5

08.04.2013, 16:22

Erstelle die doch einfach in einer std::list.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

6

08.04.2013, 16:49

Einfach mal bissl C++ lernen:
oh aber wie gebe ich dem circleshape einen name um parameter und position zuzuweisen???

CircleShape* name= new CircleShape;
name->blubb...

Techie

Alter Hase

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

7

08.04.2013, 17:19

Kann man in SFML Sprites nicht überlagern?
Man könnte dann doch theoretisch an den Schnittpunkten eine Braune Minisprite überlagern die das Schußloch darstellt.
Wird in Quake 3 soweit ich weis, so umgesetzt.

Gruß Techie
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

LsFan

Frischling

  • »LsFan« ist der Autor dieses Themas

Beiträge: 29

Beruf: Der Böse Admin sein xD

  • Private Nachricht senden

8

08.04.2013, 17:23

Danke sehr
(\ /) | Dies ist Hase.
(^.^) | <-- Bitte kopiere Hase in deine Signatur
(*_*) | und hilf ihm, die Weltherrschaft an sich zu reißen.

Werbeanzeige