Variable umwandeln
Übersicht

ZaRaKBetreff: Variable umwandeln |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
ich probiere schon seit einigen Stunden rum, aber komme zu keinem vernünftigen Ergebnis. Ich wollte als "kleinen" Einstieg, ein Zombiespielchen machen. Man selbst ist der Zombie, rennt über den Bildschirm, beisst Gegner welche sich dann auch in Zombies verwandeln und Gegner jagen. Allerdings bekomme ich diese "Verwandlung" nicht hin. Code: [AUSKLAPPEN] Graphics 800,600
SetBuffer BackBuffer() Global status=1 Global spieler=LoadImage("z.JPG") Global gegner=LoadImage("e.JPG") Global zombie=LoadImage("za.JPG") Global slp=100 Global glp=100 Global zlp=50 Global zx#=100 Global zy#=100 Global sx#=400 Global sy#=300 Global gx#=400 Global gy#=80 While Not KeyHit(1) Cls SpielerUpdate() GegnerUpdate() Angriff() Zombif() Flip Wend Function SpielerUpdate() DrawImage(spieler,sx,sy) If KeyDown(17) sy#=sy#-1 If KeyDown(30) sx#=sx#-1 If KeyDown(31) sy#=sy#+1 If KeyDown(32) sx#=sx#+1 Text sx#+55,sy#+35,"LP: "+slp End Function Function GegnerUpdate() If status=1 Then DrawImage(gegner,gx,gy) If sx<gx gx#=gx#+0.1 If sx>gx gx#=gx#-0.1 If sy<gy gy#=gy#+0.1 If sy>gy gy#=gy#-0.1 Text gx+55,gy+35,"LP: "+glp EndIf End Function Function Angriff() If ImagesOverlap(spieler,sx#,sy#,gegner,gx#,gy#) And MouseHit(1) glp=glp-10 End Function Function Zombif() If glp<=50 And ImagesOverlap(spieler,sx#,sy#,gegner,gx#,gy#) And MouseHit(2) Then zx#=gx# zy#=gy# DrawImage(zombie,zx#,zy#) status=0 EndIf End Function Irgendwo bei der Funktion "Zombif()" steckt ein Fehler drin. Wenn ich die rechte Maustaste drücke, sobald der Gegner gleich oder weniger 50 LP hat, verschwindet das Bild des Gegners, allerdings taucht kein neues auf. Wie kann ich diesen Fehler beheben? Was könnte ich generell besser/anders machen? Für Tipps, Hilfen und Anregungen bin ich sehr dankbar! ZaRaK |
||
ZaRaK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So, habs einigermaßen hinbekommen.
Allerdings scheint mir das eine äußerst unschöne Methode zu sein, da man so für jeden Zombie und jeden Gegner was separat schreiben muss. Da gibts doch sicher eine bessere Variante für, oder? ^^ Code: [AUSKLAPPEN] Graphics 800,600
SetBuffer BackBuffer() Global zstatus=0 Global status=1 Global spieler=LoadImage("z.JPG") Global gegner=LoadImage("e.JPG") Global zombie=LoadImage("za.JPG") Global slp=100 Global glp=100 Global glp2=100 Global zlp=50 Global zx#=100 Global zy#=100 Global sx#=400 Global sy#=300 Global gx#=400 Global gy#=80 Global gx2#=250 Global gy2#=90 While Not KeyHit(1) Cls SpielerUpdate() GegnerUpdate() GegnerUpdate2() ZombieUpdate() Angriff() Zombif() Flip Wend Function SpielerUpdate() DrawImage(spieler,sx,sy) If KeyDown(17) sy#=sy#-0.8 If KeyDown(30) sx#=sx#-0.8 If KeyDown(31) sy#=sy#+0.8 If KeyDown(32) sx#=sx#+0.8 Text sx#+55,sy#+35,"LP: "+slp End Function Function GegnerUpdate() If status=1 Then DrawImage(gegner,gx,gy) If sx<gx gx#=gx#+0.1 If sx>gx gx#=gx#-0.1 If sy<gy gy#=gy#+0.1 If sy>gy gy#=gy#-0.1 Text gx+55,gy+35,"LP: "+glp EndIf End Function Function GegnerUpdate2() DrawImage(gegner,gx2,gy2) If sx<gx2 gx2#=gx2#+0.1 If sx>gx2 gx2#=gx2#-0.1 If sy<gy2 gy2#=gy2#+0.1 If sy>gy2 gy2#=gy2#-0.1 Text gx2+55,gy2+35,"LP: "+glp2 End Function Function Angriff() If ImagesOverlap(spieler,sx#,sy#,gegner,gx#,gy#) And MouseHit(1) glp=glp-10 End Function Function Zombif() If glp<=50 And ImagesOverlap(spieler,sx#,sy#,gegner,gx#,gy#) And MouseHit(2) And zstatus=0 Then zx#=gx# zy#=gy# status=0 zstatus=1 EndIf End Function Function ZombieUpdate() If zstatus=1 Then DrawImage(zombie,zx,zy) If gx2>zx zx#=zx#+0.1 If gx2<zx zx#=zx#-0.1 If gy2>zy zy#=zy#+0.1 If gy2<zy zy#=zy#-0.1 Text zx+55,zy+35,"LP: "+zlp EndIf End Function |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Für unbekannte Anzahl Sachen werden Types benutzt --> Type![]() Für bekannte Anzahl Sachen werden i.d.R. Arrays benutzt --> Dim ![]() Dann ersparst du dir Unendliche Codeketten alá Function GegnerUpdate2() Function GegnerUpdate3() Function GegnerUpdate4() Function GegnerUpdate5() Hier gleich mal ein TestCode: [AUSKLAPPEN] Graphics 400,400,0,2
SetBuffer BackBuffer() Local Timer=CreateTimer(50) Type TFlare Field XP# Field YP# Field XG# Field YG# Field AT% Field FA% End Type Local XP#=0 Local YP#=0 Local XG#=0 Local YG#=0 Local TF.TFlare While Not KeyHit(1) XP=MouseX() YP=MouseY() XG=MouseXSpeed() YG=MouseYSpeed() XG=XG/10 YG=YG/10 If MouseDown(1) Then ;Neuen Partikel erstellen TF.TFlare=New TFlare ;Zufälligen Farbwert zuweisen TF\FA=Rand(0,255) ;Position aus Mausposition TF\XP=XP TF\YP=YP ;Geschwindigkeit aus MausSpeed TF\XG=XG+Rnd(-.1,.1) TF\YG=YG+Rnd(-.1,.1) End If ;Alle Partikel bewegen For TF.TFlare=Each TFlare ;Geschwindigkeit zur Position zurechnen TF\XP=TF\XP+TF\XG TF\YP=TF\YP+TF\YG ;Bildschirmeingrenzung beibehalten If TF\XP>400 Or TF\XP<0 Then TF\XG=-TF\XG If TF\YP>400 Or TF\YP<0 Then TF\YG=-TF\YG ;Altern vom Partikel um eins TF\AT=TF\AT+1 ;Farbe und Position vom Partikel zeichnen Color 255,TF\FA,255-TF\FA Rect TF\XP-2,TF\YP-2,5,5,1 ;Wenn Partikel älter als 500 dann diesen löschen If TF\AT>500 Then Delete TF Next WaitTimer(Timer) Flip 0 Cls Wend End Und normaler Weise geht man pennen um die Zeit. ![]() |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würd das so machen:
Wenn die Lebenspunkte <= 50 sind und sich die Bilder überlappen und man die Maustaste drückt, dann: Wird das Image für den Type einfach geändert. Ich würde dir sowieso raten, eine einheitliche "AllesZeichnen" Funktion zu schreiben. Ansonsten kann ich dir auch nur raten dich wirklich mal mit Types zu beschäftigen. UNdzwar ordentlich. Sonst seh ich für das Spiel da schwarz. Lg, M0rgenstern |
||
ZaRaK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank für eure Antworten!
Das mit den Types habe ich nun mal versucht, allerdings flackern die Gegner hier wie wild über den Bildschirm. Irgendwas habe ich wohl mit der 'for Schleife' falsch gemacht. Es werden ständig 3 neue Gegner irgendwo erstellt und sofort wieder entfernt. Wo liegt hier der Fehler? Ich kann ihn einfach nicht finden. Code: [AUSKLAPPEN] Graphics 800,600
SetBuffer BackBuffer() Global zstatus=0 Global status=1 Global spielerimg=LoadImage("z.JPG") Global gegnerimg=LoadImage("e.JPG") Global zombieimg=LoadImage("za.JPG") Global slp=100 Global zlp=50 Global zx#=100 Global zy#=100 Global sx#=400 Global sy#=300 Type Gegner Field glp# Field gx# Field gy# Field zomb# End Type Global g.gegner Global glp#=100 Global gx#=0 Global gy#=0 Global zomb#=0 While Not KeyHit(1) Cls For g.gegner=Each gegner Delete g Next SpielerUpdate() Gegner() GegnerUpdate() Flip Wend Function SpielerUpdate() DrawImage(spielerimg,sx,sy) If KeyDown(17) sy#=sy#-1 If KeyDown(30) sx#=sx#-1 If KeyDown(31) sy#=sy#+1 If KeyDown(32) sx#=sx#+1 Text sx#+55,sy#+35,"LP: "+slp End Function Function Gegner() For i=1 To 3 g.gegner=New Gegner g\gx#=Rnd(800) g\gy#=Rnd(600) Next End Function Function GegnerUpdate() For g.gegner=Each gegner DrawImage(gegnerimg,g\gx#,g\gy#) Text g\gx#+55,g\gy#+35,"LP: "+glp If ImagesOverlap(spielerimg,sx#,sy#,gegnerimg,gx#,gy#) And MouseHit(1) glp=glp-10 Next End Function |
||
![]() |
Starwar |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du darfst die Gegner nicht immer löschen und dann an einer Zufallsposition neu setzen. ![]() Vor der Hauptschleife erstellst du sie (For i=0 to anzahl-1 Und New) und in der Hauptschleife änderst du ihre Position und zeichnest sie (For-Each) MFG |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group