[B2D] Gegner (Weltraumshooter)
Übersicht

![]() |
N0XBetreff: [B2D] Gegner (Weltraumshooter) |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo !
Ich versuche seit ca. 3 Stunden einen Weltraumshooter zu programmieren und hänge jetzt bei der Gegnerbewegung. Hier der Code: Code: [AUSKLAPPEN] AppTitle "Weltraumshooter"
;Auflösung Const ax=1024 Const ay=768 ;Farben Const fx=32 ;Variablen Global px=512 Global py=700 Global speed=5 Global sx=523 Global sy=740 Global geganzahl=10 ;-------------------------------------------------------------------------------------------- Type schuss Field x Field y End Type Type gegner Field x Field y Field image Field speed End Type ;-------------------------------------------------------------------------------------------- Graphics ax,ay,fx,2 SetBuffer BackBuffer() ;Laden der Ressourcen Global schiff = LoadImage("gfx\schiff.png") ;Vorbereitung der Ressourcen zur Nutzung MaskImage schiff,255,255,255 ClsColor 0,0,0 ;-------------------------------------------------------------------------------------------- gegner_erstellen() ;-------------------------------------------------------------------------------------------- Repeat Cls Bewegen() GegUpdate() Sterne() If KeyHit(57) Then s.Schuss = New schuss s\x = sx s\y = sy EndIf For s.Schuss = Each Schuss s\y = s\y - speed Rect s\x,s\y,2,5 If s\y < 10 Then Delete s.Schuss Next DrawImage schiff,px,py Flip Until KeyHit(1) End ;-------------------------------------------------------------------------------------------- Function Bewegen() If KeyDown(30) Then px=px-1.5 sx=sx-1.5 If KeyDown(32) Then px=px+1.5 sx=sx+1.5 End Function Function gegner_erstellen() For a = 0 To geganzahl g.gegner = New gegner g\x = Rnd(0,1000) g\y = Rnd(0,500) g\image = LoadImage("gfx\gegner.png") Next MaskImage g\image,255,255,255 End Function Function GegUpdate() For upd.gegner = Each gegner DrawImage upd\image, upd\x, upd\y MaskImage upd\image,255,255,255 Next End Function Function Sterne() For i=0 To 100 Plot Rnd(0,1024),Rnd(0,768) Next End Function Ich hoffe ihr könnt mir helfen ! Mfg, N0X |
||
- Zuletzt bearbeitet von N0X am Mo, Dez 29, 2008 15:57, insgesamt 4-mal bearbeitet
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was ist denn das Problem? | ||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, sorry hab die Fragestellung versaut ![]() Also, ich möchte jetzt das die Gegner sich zufällig bewegen und der Y-Achse nach unten bewegen. Mfg, N0X |
||
![]() |
N0XBetreff: Kollision ! |
![]() Antworten mit Zitat ![]() |
---|---|---|
Neues Problem !
Wenn ich die Gegner abschieße funktioniert es nur teilweise. Immer bei genau einem Gegner kommt "Memory Violation Error" Und noch dazu lässt sich der Gegner nicht löschen wenn 2 Schüsse auf dem Bildschirm sind. Warum ? ![]() Hier der Code: [AUSKLAPPEN] AppTitle "Weltraumshooter"
;Auflösung Const ax=1024 Const ay=768 ;Farben Const fx=32 ;Variablen Global px=512 Global py=700 Global speed=5 Global sx=523 Global sy=740 Global geganzahl=10 ;--------------------------------------------------------------------------------------------| Type schuss Field x Field y End Type Type gegner Field x Field y Field image Field speed End Type ;--------------------------------------------------------------------------------------------| Graphics ax,ay,fx,2 SetBuffer BackBuffer() SeedRnd MilliSecs() ;Laden der Ressourcen Global schiff = LoadImage("gfx\schiff.png") ;Vorbereitung der Ressourcen zur Nutzung MaskImage schiff,255,255,255 ClsColor 0,0,0 ;--------------------------------------------------------------------------------------------| gegner_erstellen() ;--------------------------------------------------------------------------------------------| Repeat Cls Bewegen() Sterne() GegUpdate() If KeyHit(57) Then s.Schuss = New schuss s\x = sx s\y = sy EndIf For s.Schuss = Each Schuss s\y = s\y - speed Rect s\x,s\y,2,5 If s\y < 10 Then Delete s.Schuss Next If px <2 Then px=2 sx=13 If px >980 Then px=980 sx=991 For g.Gegner = Each Gegner For s.Schuss = Each Schuss If ImageRectCollide(g\image,g\x,g\y,0,s\x,s\y,2,5) Then Delete g.Gegner Next Next DrawImage schiff,px,py Flip Until KeyHit(1) End ;--------------------------------------------------------------------------------------------| ;--------------------------------------------------------------------------------------------| Function Bewegen() If KeyDown(30) Then px=px-1.5 sx=sx-1.5 If KeyDown(32) Then px=px+1.5 sx=sx+1.5 End Function Function gegner_erstellen() For a = 0 To geganzahl g.gegner = New gegner g\x = Rnd(0,1000) g\y = Rnd(0,500) g\image = LoadImage("gfx\gegner.png") MaskImage g\image,255,255,255 Next End Function Function GegUpdate() For upd.gegner = Each gegner DrawImage upd\image, upd\x, upd\y MaskImage upd\image,255,255,255 Next End Function Function Sterne() For i=0 To 100 Plot Rnd(0,1024),Rnd(0,768) Next End Function Mfg, N0X |
||
![]() |
Thorsten |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] For g.Gegner = Each Gegner
For s.Schuss = Each Schuss If ImageRectCollide(g\image,g\x,g\y,0,s\x,s\y,2,5) Then Delete g.Gegner Next Next Code: [AUSKLAPPEN] For g.Gegner = Each Gegner
For s.Schuss = Each Schuss If ImageRectCollide(g\image,g\x,g\y,0,s\x,s\y,2,5) Then Delete g.Gegner Exit EndIf Next Next Ein Exit um nicht noch einen Schuss beim bereits gelöschten Gegner abzufragen. |
||
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok, hab's getestet
aber der "Memory Violation Error" (bei immer einem Gegner) ist immer noch da ... und jetzt wird kein Gegner mehr gelöscht wenn mehrere Schüsse auf dem Bildschirm sind ... ![]() Mfg, N0X |
||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] For s.Schuss = Each Schuss
For g.Gegner = Each Gegner If ImageRectCollide(g\image,g\x,g\y,0,s\x,s\y,2,5) Then Delete g.Gegner Exit Endif Next Next So müsste es gehen, aber der Error komm wahrscheinlich von dem ImageRectCollide. Ich würde den schuss auch noch löschen, wenn er einen Gegner trifft. |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ah, schon viel besser ! Jetzt kann man auch mehrere Schüsse abfeuern ohne das dann kein Gegner gelöscht wird !
Danke ! Aber der "Memory Acess Violation" Error kommt immernoch ... Wie du schon sagtest liegts wahrscheinlich am ImageRectCollide, weiß dafür vielleicht noch jemand eine Lösung ? Das seltsame ist ja, dass es immer nur EIN Gegner ist bei dem der Error kommt ! ![]() Mfg, N0X |
||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja probier mal RectsOverlap![]() |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, es hat bestens geklappt !
Vielen, Vielen Dank ! Jetzt muss ich nur noch die Gegner bewegen ... Mfg, N0X Edit: Wie schaffe ich es das wenn alle Gegner deletet sind wieder neue entstehen ? Hier der Code: [AUSKLAPPEN] AppTitle "Weltraumshooter"
;Auflösung Const ax = 1024 Const ay = 768 ;Farben Const fx = 32 ;Variablen Global px = 512 Global py = 700 Global speed = 5 Global gegspeed = 2 Global sx = 523 Global sy = 740 Global points = 0 Global lives = 3 Global geganzahl= 10 ;--------------------------------------------------------------------------------------------| Type schuss Field x Field y End Type Type gegner Field x Field y Field image End Type ;--------------------------------------------------------------------------------------------| Graphics ax,ay,fx,1 SetBuffer BackBuffer() SeedRnd MilliSecs() ;Laden der Ressourcen Global schiff = LoadImage("gfx\schiff.png") Global side = LoadImage("gfx\sidebar.png") Global shot = LoadSound("sound\shot.wav") Global treffer = LoadSound("sound\treffer.wav") ;Vorbereitung der Ressourcen zur Nutzung MaskImage schiff,255,255,255 ClsColor 0,0,0 ;--------------------------------------------------------------------------------------------| gegner_erstellen() ;--------------------------------------------------------------------------------------------| Repeat Cls Bewegen() Sterne() GegUpdate() PlyUpdate() If KeyHit(57) Then s.Schuss = New schuss s\x = sx s\y = sy PlaySound shot EndIf For s.Schuss = Each Schuss s\y = s\y - speed Rect s\x,s\y,2,5 If s\y < 10 Then Delete s.Schuss Next For s.Schuss = Each Schuss For g.Gegner = Each Gegner If RectsOverlap(g\x,g\y,40,40,s\x,s\y,2,5) Then Delete s.Schuss Delete g.Gegner PlaySound treffer points=points+10 Exit EndIf Next Next DrawImage schiff,px,py DrawImage side,824,0 Texte() Flip Until KeyHit(1) End ;--------------------------------------------------------------------------------------------| ;--------------------------------------------------------------------------------------------| Function Bewegen() If KeyDown(30) Then px=px-1.5 sx=sx-1.5 If KeyDown(32) Then px=px+1.5 sx=sx+1.5 End Function Function gegner_erstellen() For a = 0 To geganzahl g.gegner = New gegner g\x = Rnd(0,760) g\y = Rnd(-900,-20) g\image = LoadImage("gfx\gegner.png") MaskImage g\image,255,255,255 Next End Function Function GegUpdate() For upd.gegner = Each gegner DrawImage upd\image, upd\x, upd\y MaskImage upd\image,255,255,255 Next For g.Gegner = Each Gegner g\y = g\y +gegspeed If g\y > 770 Then g\y=Rnd(-900,-20) Exit Next End Function Function PlyUpdate() If px <2 Then px=2 sx=13 If px >770 Then px=770 sx=781 End Function Function Sterne() For i=0 To 100 Plot Rnd(0,1024),Rnd(0,768) Next End Function Function Texte() If KeyHit(41) Then GetKey() EndIf Text 920,165,+lives Text 920,290,+points End Function |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group