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

1

10.01.2006, 11:46

Bei Tastendruck ne Funktion ausführen?

Hallo,

ich hab gerade bischen angefangen im C++ 3d-Spieleprogrammierungsbuch zu lesen und gleich auf den ersten Seiten kommen Befehle vor, die im C++ für Spieleprogrammierer gar nicht vorkamen.

es handelt sich hierbei um

abKey[KEY_LEFT] blablabla

sowie ich das verstanden habe, wird da , wenn man jetzt die pfeiltaste links drückt, die figur um eine entsprechende einheit nach links versetzt.

damit das immer funktioniert wurde eine void funktion erstellt.

nun zu meiner frage:

wie funktioniert denn das bitte?

ich denke mal abKey ist ne charvariable, die in der funktion definiert werden muss.

und in der eckigen klammer steht der key der gedrueckt werden muss.

nur wenn ich jetzt z.b. folgende funktion schreibe

void ShopMenue()
{
char key;

if (key[KEY_S] Trader();
}


passiert nix außer 3 fehler :D

kann mir das mal wer erklären plz?

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

2

10.01.2006, 13:15

Zunächst mal ist C++ für Spieleprogrammierer nicht der erste Teil von 3D Spieleprogrammierung, sondern nur eine Empfehlung, daher ist das Wissen das in Heikos Buch vermittelt wird nicht identisch mit dem Wissen, das in Davids Buch vorrausgesetzt wird (auch wenn der Verlag das andeutet, das sind wohl mehr wirtschaftliche Gründe)
Zu deiner Frage:
Du definierst eine Variable Key vom Typ char. key kann jetzt also 1 Buchstaben speichern. Danach versuchst du, zu gucken, ob key = s ist. Dein Ansatz ist aber falsch, weil du
1. key nicht zugewiesen hast. Du müsstest etwas in der Art machen wie
key = wartenaufbenutzereingabe();

wobei wartenaufbenutzereingabe() einen Buchstaben zurückliefern müsste, den der Benutzer gedrückt hat.
2. key[irgendwas] geht nicht, weil die eckigen Klammern benutzt werden, um auf das Element eines Arrays zuzugreifen. Also char key[5]; key[1] = 'a'; geht, aber nicht char key; key[1] = 'a';
3. Deine if Abfrage ist dementsprechen falsch, richtig wäre:
if (key == 's') Trader();

Da ich das Buch gerade nicht vorliegen habe, kann ich dir nicht helfen in Bezug auf Funktionen, die da benutzt werden, aber soweit ich das in Erinnerung habe sind das sowieso nur ausgedachte Funktionen, die es gar nicht gibt (zum Verdeutlichen), dementsprechend kannst du auch nicht mit ihnen programmieren.

Außerdem verschiebe ich den Beitrag ins 3D Spieleprogrammierungs Buch Forum, wo er hingehört.

Anonymous

unregistriert

3

10.01.2006, 13:30

das mit dem key == 's' etc. ist mir klar... sowas wurde ja auch öfters für ein menue z.b. benutzt
(S)tart

if char == 's'
cout << "start";

etc.

ich möchte aber gerne, dass wenn immer der spieler im spiel s drückt wird die händlerfunktion augerufen.

also z.b. kA meine figur geht im wald herum, jetzt hat der den beutel voller gegenstände, drückt also 's' und die funktion shop soll jetzt aufgerufen werden, wo er die sachen verkaufen kann und neue einkaufen kann.

aber thx für den hinweis, dass das mit der [] nur ein array war ... auf das wär ich nicht gekommen, weil mich das KEY_LEFT verwirrt hat :/

thx trotzdem

mfg
Simon

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

4

10.01.2006, 13:35

Dann baust du am besten ne case struktur ein oder du überprüfst direkt alle gedrückten tasten..
also in deiner move funktion nen key event handler, der überprüft welche taste(n) gedrückt wurde(n) und die entsprechenden funktionen dazu.

5

10.01.2006, 13:53

hm also irgendwie schein ich dafür zu wenig wissen zu besittzen atm :)

ich weiß nur, wie ich einen tastendruck abfrage wenn ich es wirklich will.

z.b. beim menue: da warte ich bis der typ vorm flimmerkasten eine taste drückt und mach dann die entsprechenden sachen.

aber wie andauernd etwas überprüft wird hab ich keine ahnung, weil ich ja ned weiß, wie ich 2 funktionen "paralell" laufen lasse, sondern immer nur eine und die linkt dann weiter zu den anderen funktionen.

oder gibts da so ne funktion a la warcraft3 editor ;)

every 1 second do blablabla :D

ich denk mal nicht^^

naja vl erlang ich das wissen später noch, oder du könntest mir kurz ne funktion schreiben die das erfüllt :)

ums zu vereinfachen... ich denk mal du kennst sicherlich rollenspiele. wenn man (sagen wir mal) h drückt wird ein heiltrank gesoffen... und sowas möchte ich ja eigentlich auch haben.

kannst mir kurz erklären wie das gehen könnte?

mfg
Simon

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

10.01.2006, 15:11

Du rufst jeden Frame einmal die Daten ab und fragst die tastendrücke ab.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

7

10.01.2006, 15:38

kannst mir mal erklären wie das geht?

hab C++ erst seid ca 2 wochen und kenn deshalb gewisse sachen noch nicht :)

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

8

10.01.2006, 15:50

Mit 2 Wochen C++ kannste den Scherfgen auch unmöglich verstehen...

Lern rest mal richtig C++.

Ciau

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

10.01.2006, 19:15

Das sind Beispiele! Sie sind nicht dafür gedacht, dass sie funktionieren, sondern um etwas anderes zu vermitteln. Das steht auch dort geschrieben.

10

12.01.2006, 14:40

es ist mir klar, dass es nur beispiele sind, da das ja auch unter jedem bild steht

DEMONSTRATION oder BEISPIEL VON ...

aber das muss ja nicht heißen, dass wenn man es richtig macht, dass sie dann nicht funktionieren *hmhm*

naja bin jetzt bischen weiter mit informationssammeln und bin dabei auf multithreading gestoßen.

das scheint meinen gewünschten effekt zu erzielen ABER mit dem programm boost (boost.org) gehts mal nicht, wiel das bei der installation schon fehler aufweißt, weshalb es auf die einfache art mal nicht ging.

kann mir hier kurz einer die 4-5 sachen aufzählen die ich für nen thread brauche?

ich find immer nur tuts oder beispiele, die das sehr schlecht erklären und die teilweise nicht mal funktionieren, weil ich die nötigen libs oder include dateien nicht besitze.

wäre dankbar

thx

Werbeanzeige