Probleme bei Bildwechsel in 2d
Übersicht

ZiggyBetreff: Probleme bei Bildwechsel in 2d |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hab ein "winziges" jump and run gebastelt.
Mein Männchen hat mehrere Waffen zur auswahl. Die Waffe kann ich mit der Taste [1] wechseln (später durch Powerup), funktioniert auch alles super. Problem: Wenn ich bereits einige Schüsse abgegeben habe und dann die Waffe wechsel, werden die alten Schüsse ebenfalls mit den neuen Bildern gezeichnet. Das sieht natürlich doof aus. Mein code: Code: [AUSKLAPPEN] [...] Function startgame() If KeyHit(25) Then gamemode = 4 optionsmode = 0 Cls movement() For s.shot = Each shot s\px = s\px + wpnspeed DrawImage wpnimg,s\px,s\py If s\px > gfxWidth-50 Then s\px = gfxWidth-50 If s\frame < 6 Then s\frame = s\frame + 1 DrawImage expl1,s\px,s\py,s\frame s\dead = s\dead + s\frame EndIf EndIf If s\dead = 6 Delete s.shot Next DrawImage player,px,py,0 End Function Function movement() If leftkey Then px = px - player_speed For I = 0 To 1 DrawImage player,px,py,I Next EndIf If rightkey Then px = px + player_speed If upkey And jump = False Then jump = True jumpmax# = 8 EndIf If shotkey Then If shotcount < maxshots Then shotcount = shotcount + 1 PlaySound wpnsnd shot() Else PlaySound snd_emptywpn EndIf EndIf If reloadkey Then shotcount = 0 PlaySound snd_reload EndIf If KeyHit(2) Then weapon = weapon + 1 If weapon > 4 Then weapon = 1 ;Rand testen If px < 0 Then px = 0 If px > gfxWidth-64 Then px = gfxWidth-64 End Function Function shot() s.shot = New shot s\py = py +10 s\px = px +50 s\speed = 8 s\dead = 0 s\frame = 0 End Function [...] Hiervon sind die Waffen abhängig: Code: [AUSKLAPPEN] Function weapons() If weapon = 1 Then weaponname = "Handgun" maxshots = 12 wpnspeed = 8 wpnsnd = snd_shot1 wpnimg = shot1 EndIf If weapon = 2 Then weaponname$ = "Shotgun" maxshots = 1 wpnspeed = 7 wpnsnd = snd_shot2 wpnimg = shot2 EndIf If weapon = 3 Then weaponname$ = "Laser" maxshots = 20 wpnspeed = 9 wpnsnd = snd_shot3 wpnimg = shot3 EndIf If weapon = 4 Then weaponname$ = "Snowball" maxshots = 10 wpnspeed = 6 wpnsnd = snd_shot4 wpnimg = shot4 EndIf End Function Die Waffenbilder werden separat in einer Funktion geladen, sollte hier nicht so wichtig sein. Ich danke euch für eure Anregungen. Gruß. Edit: Ich kann mich erst heute Nachmittag wieder damit befassen, bin erst in der Schule. |
||
"Es gibt 10 Arten von Menschen: Diejenigen die Binär verstehen, und jene die es nicht verstehen."
"Irren ist menschlich, gut dass ich ein Gott bin... xD" letzte Informatik-Note : 1 ... 96% richtig, Thema: C++ switch/case |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Weg dieses Problem zu erledigen liegt darin deinen Schüssen beim Abfeuern schon einen Typ zuzuweisen, sprich eine eindeutige Informationsnummer.
Du benutzt ja schon types- erstelle einen Type für Schüsse und leg darin die gewünschten Daten wie Bild, Sound, Schaden und Geschwindigkeit ab. Dann trägt jeder Schuss alle benötigten Informationen 'bei sich' und nichts kann verloren gehen. EDIT: deine Abfrage auf die Waffe im unteren code kannst Du sehr schön mit einem select-case ausrüsten. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Ziggy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die Antwort.
Also muss ich statt nur einem Type für Schuss mehrere Anlegen? Also Type Schuss1, Type Schuss2, und darin die Bild-Informationen speichern. Das mit den Select...Case muss ich mir noch angewöhnen, irgendwie scheine ich auf IF's zu stehen ![]() |
||
"Es gibt 10 Arten von Menschen: Diejenigen die Binär verstehen, und jene die es nicht verstehen."
"Irren ist menschlich, gut dass ich ein Gott bin... xD" letzte Informatik-Note : 1 ... 96% richtig, Thema: C++ switch/case |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein, es reicht ein Type, aber dem halt mehrere Fields zuweisen anhand derer Du die schüsse unterscheiden kannst.
Bsp: Code: [AUSKLAPPEN] type schuss
field art field speed end type ... for a.schuss = each schuss select a\art case 1 a\speed = 21 case 2 a\speed = 1 end select next Das ist natürlich jetzt extremst vereinfacht... |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Ziggy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hab das jetzt so umgesetzt wie du es gesagt hast...
Leider wechseln die Bilder immer noch so wie vorher. Code: [AUSKLAPPEN] For s.shot = Each shot s\px = s\px + s\speed Select weapon Case 1 s\image = img_shot1 s\name = "Handgun" s\sound = snd_shot1 s\maxshots = 12 s\speed = 8 Case 2 s\image = img_shot2 s\name = "Pumpgun" s\sound = snd_shot2 s\maxshots = 12 s\speed = 8 Case 3 s\image = img_shot3 s\name = "Laser" s\sound = snd_shot3 s\maxshots = 12 s\speed = 8 Case 4 s\image = img_shot4 s\name = "Snowball" s\sound = snd_shot4 s\maxshots = 12 s\speed = 8 End Select DrawImage s\image,s\px,s\py PlaySound s\sound If s\px > gfxWidth-50 Then s\px = gfxWidth-50 If s\frame < 6 Then s\frame = s\frame + 1 DrawImage expl1,s\px,s\py,s\frame s\dead = s\dead + s\frame EndIf EndIf If s\dead = 6 Delete s.shot Next Es scheint vor Denkfehlern zu wimmeln... ![]() |
||
"Es gibt 10 Arten von Menschen: Diejenigen die Binär verstehen, und jene die es nicht verstehen."
"Irren ist menschlich, gut dass ich ein Gott bin... xD" letzte Informatik-Note : 1 ... 96% richtig, Thema: C++ switch/case |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du musst die Waffenart EINMALIG festlegen, nämlich dann wenn der Schuss erstellt wird. Danach wird nur entsprechend der Waffenart (Die ja im Type selber mit abgespeichert ist, siehe mein Beispiel) eingezeichnet.
Das Prinzip ist es bei der Geburt des Objektes seine Eigenschaften festzulegen und danach nur noch updates an den veränderlichen Daten durchzuführen. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mein Vorschlag:
Code: [AUSKLAPPEN] Type schuss Field x Field y Field art End Type [...] For a.schuss = Each schuss Select a\art Case "Micky Mouse" Drawimage Micky_Mouse, a\x, a\y etcetc... Image im Type abspeichern verbraucht nur RAM, bei 2D kann man soviel zeichnen wie man will. |
||
ZiggyBetreff: Ich habs !!! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also ich habe es jetzt rausbekommen.
Der Hinweis "lege die Art des Schusses beim erstellen fest" hat mich drauf gebracht. Eure Codes haben mir leider nicht weitergeholfen, denn ihr habt die Art jedesmal in der For....Each-Schleife abgefragt. Da aber diese Schleife (wegen Each) ja für ALLE Schüsse gelten werden dort auch ALLE Schussbilder geändert (auch wenn sie schon gezeichnet sind). Der Clou lag darin die Case...Select-Abfrage für den Waffenmodus in die For....New-Schleife reinzuhämmern. Code: [AUSKLAPPEN] Function shot() s.shot = New shot s\py = py +10 s\px = px +50 s\dead = 0 s\frame = 0 s\speed = 8 Select weapon Case 1 s\image = img_shot1 Case 2 s\image = img_shot2 Case 3 s\image = img_shot3 Case 4 s\image = img_shot4 End Select End Function Dort wird dann für jeden neuen (NEW) Schuss das jeweilige Bild gewählt. Ich vermute dass ihr genau das gemeint habt, doch da ihr jedesmal von der For...Each-Schleife geschrieben habt bin ich nicht dahinter gekommen. Ich danke euch für eure Denkanstösse. Gruß. |
||
"Es gibt 10 Arten von Menschen: Diejenigen die Binär verstehen, und jene die es nicht verstehen."
"Irren ist menschlich, gut dass ich ein Gott bin... xD" letzte Informatik-Note : 1 ... 96% richtig, Thema: C++ switch/case |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group