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

Anonymous

unregistriert

1

28.01.2004, 11:48

maus-event & for-schleifen

hallo erstma ...

wir programmieren zur zeit ein spiel mit directx und haben ein problem.
stand der dinge: wir wollen ein kleines strategiespiel programmieren, und das praktisch in 2d, nur mit bitmaps. gib jetzt haben wir schon die "map" (also die landkarte, aus der das ganze spektakel statt findet) und einen panzer. man kann shcon den panzer anklicken, dann erscheint der energiebalken (den man ja auch aus anderen spielen kennt) und mann ihr fahren lassen, in dem man mit der maus auf eine stelle klickt.oder man kann ich auch weider ent-markieren, mit der rechten maustaste.

problem:
der panzer fährt nicht da hin, wo er hin soll...


so wir haben structs(arrays) für einheiten angelegt, in denen jegliche attribute angelegt sind.

mit einer definierten einheit klappt es ja wunderbar( z.B. "einheit[0].xpos" ...usw) aber um mit mehreren einheiten arbeiten zu können, haben wir strukturen geschrieben(überweigend for-schleifen mit if-entscheidungen --> z.B. "einheit.posx"),die beim klicken der linken maustaste vergleichen welche einheit / welches gebäude denn nun markiert ist. als pap funktioniert diese struktur einwandfrei, nur im programm fährt der panzer einfach nur immer in eine richtung (un das schon bevor man irgenein ziel anklickt). Kommentiert man die for-schleife aus, funktioniert es...

bitten um hilfe ...

danke im voraus....

Master_Max

Frischling

Beiträge: 9

Wohnort: München

Beruf: Schüler

  • Private Nachricht senden

2

28.01.2004, 14:16

Guten Tag.
Ohne (Pseudo)Code wird dir wohl niemand helfen können.

MfG Max
It´s time to change.

Anonymous

unregistriert

3

29.01.2004, 10:39

na ok .... da hast du wahrscheinlich recht ....

mein teamkollege ist momentan nicht erreichbar, daher komme ich im moment nicht an den quellcode.

werde ihn später posten....

werd mal mit ienem metasprachen-misch-masch versuchen... ;)


// Im LeftMouse-Clicked Event

int i=0;

for(i=0;i<30;i++) //Schleife, die alle Einheiten und Gebäude ablüuft, "30" = maximale Einheitenzahl
{
if("maus über einheit")
{
for(int k=0;k<30;k++) // setzt alle markierungen auf false, damit keine 2 Einheiten/Gebäude markiert werden können
{
Einheit[k].markiert = false;
Gebäude[k].markiert = false;
}
Einheit[i].markiert = true;
}else
{
if("maus über Gebäude[i]")
{
for(int k=0;k<30;k++)// setzt alle markierungen auf false, damit keine 2 Einheiten/Gebäude markiert werden können
{
Einheit[k].markiert = false;
Gebäude[k].markiert = false;
}
Gebäude[i].markiert = true;
}else
{
// Es wurde auf die Karte Geklickt
for(k=0;k<30;k++)
{
if(Einheit[k].markiert==true)
{
"Einheit[k].zielposition = Mausposition"
}
}
}
}
}



// ************************************************

Parell dazu läuft immer die Bewegungsfunktion in der Move-Funktion (welche, ja permanent im hintergrund durchläuft). Die Bewegungsfunktion Vergleicht, ob die Zeilposition einer Jeden Einheit gleich ist mit der Aktuellen position und Bewgt die einheit. Diese Funktioniert auch einwandfrei, unter der bedingung, dass man nicht mit der oben angegebenen for-schleife arbeitet, sonder nur mit einheit[0] (unserem Testpanzer).


kann uns jemand helfen???
(der komplette quellcode folg in kurzer zeit. Vielleicht hat ja jemand schn so eine idee, oder findet einen fehler, da wir extrem in zeitdruck sind...)

danke schonmal ...

4

29.01.2004, 17:12

Kan leider keinen Fehler entdecken. Allerdings hab ich ein paar Hinweise zur Performance.

Quellcode

1
2
3
4
5
for(int k=0;k<30;k++) // setzt alle markierungen auf false, damit keine 2 Einheiten/Gebäude markiert werden können 
{ 
Einheit[k].markiert = false; 
Gebäude[k].markiert = false; 
}
Diese Schleife gefällt mir nicht sonderlich und kann man auch anders lössen. Der Selektierte Gegenstand kann auch Seperat gespeichert werden und wurde dann ein anderer Gegenstand gefunden der Markiert wurde brauch man nur diesen einen Gegenstand deselektieren und nicht alle durchlaufen.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Anonymous

unregistriert

5

29.01.2004, 20:56

stimmmt, gute idee ....thx!

werden das umgehend umsetzen ......


wenn jemand noch einen vorschlag zu dem eigentlichen problem hat ... immer her damit!! ;)

Werbeanzeige