collisions problem die 1000ste *NEUES PROBLEM*

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Schranz0r

Betreff: collisions problem die 1000ste *NEUES PROBLEM*

BeitragSo, Aug 20, 2006 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
ich bekomm keine Collision zwischen schuss und alien hin Shocked
kann mir mal bitte einer helfen Confused

BlitzBasic: [AUSKLAPPEN]

Graphics 640,480,0,1
SetBuffer BackBuffer()

Global shipX
Global shipY = 450
Global punkte
Global gegnerX
Global gegnerY
Global shoot = LoadImage("schuss.bmp")
Global gegner = LoadImage("der.bmp")
ship = LoadImage("ship.png")
hud = LoadImage("hud.png")


MaskImage hud,255,0,255

Dim X(100), Y(100), V(100)
For i=0 To 100
X(i)=Rnd(0,639)
Y(i)=Rnd(0,479)
V(i)=Rnd(1,10)
Next


Type schuss
Field Xpos#
Field Ypos#
End Type

Type alien
Field aX#
Field aY#
End Type
;-----------------HAUPTSCHLEIFE----------------
Repeat
a = 0
shipX = MouseX()
gegnerX = Rand(150,590)
gegnerY = 10

Cls
Color 255,255,255
For i=0 To 100
Y(i)=Y(i)+V(i)
If Y(i)>479 Then Y(i)=0: V(i)=Rnd(1,10)
Plot X(i),Y(i)
Next

If shipX > 615 Then shipX = 615
If shipX < 140 Then shipX = 140

If MouseHit(1) Then
create_schuss(shipX,shipY)
EndIf

MidHandle ship
DrawImage ship,shipX,shipY

berechne_schusse()
berechne_alien()
create_alien(aX,aY)
DrawImage hud,0,0

Flip
Xprint(0,0,255,40,70,punkte)


Until KeyHit(1)
End


;--------------------------------------SCHUSS---------------------
Function create_schuss(Xpos,Ypos)
schuss.schuss=New schuss
schuss\Xpos = shipX
schuss\Ypos = shipY - 20
End Function

Function berechne_schusse()
For schuss.schuss=Each schuss

schuss\Ypos = schuss\Ypos - 5

MidHandle shoot
DrawImage shoot,schuss\Xpos,schuss\Ypos

If schuss\Ypos < 20 Then
Delete schuss.schuss
EndIf


Next

End Function
;-------------------------------------ALIEN------------------------
Function create_alien(aX,aY)
w = Rand(1,100)
If w = 10 Then
alien.alien=New alien
alien\aX = gegnerX
alien\aY = gegnerY
EndIf
End Function

Function berechne_alien()
For alien.alien=Each alien

alien\aY = alien\aY + 2
MidHandle der
DrawImage gegner,alien\aX,alien\aY

Next
End Function


;------------------------------------REST-----------------------------
Function XPrint(rot,gruen,blau,x,y,txt$)
Color rot,gruen,blau
Locate x,y
Print txt$
Cls
End Function

  • Zuletzt bearbeitet von Schranz0r am So, Aug 20, 2006 21:16, insgesamt 2-mal bearbeitet
 

Dreamora

BeitragSo, Aug 20, 2006 20:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Du prüfst ja auch nicht auf kollision.

Solange wir nicht wissen wo dein Problem genau liegt, können wir dir nicht helfen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
  • Zuletzt bearbeitet von Dreamora am So, Aug 20, 2006 20:51, insgesamt einmal bearbeitet

Apprauuuu

BeitragSo, Aug 20, 2006 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Also für ne Kollision musst du beide Types verschachtelt durchlaufen....

Das sähe so aus:

Code: [AUSKLAPPEN]
 
 For alien.alien=Each alien
        for schuss.schuss = each schuss
               if imagescollide(gegner,alien\aX,alien\aY, 0 shoot,schuss\Xpos,schuss\Ypos, 0) then
   
             endif
        next                 
 Next


Ach und du kannst den befehl midhandle ein mal am Anfang des Spiels benutzen udn das reicht dann schon....
Also nicht in die Schleife tun Wink
Arbeitsstand:
Umprogrammierung von LOL³Warriors und LOL³Fighters in Bmax...
LOL³Fighters wird spielerisch noch mal ordentlich aufpoliert, um es Ligatauglich zu machen (zumindest für private Funligen von mir ^^)

Schranz0r

BeitragSo, Aug 20, 2006 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh dank dir Very Happy

EDIT:


Super funzt , hast aber ein --> , <---- vergessen Very Happy


Neues Problem

Code: [AUSKLAPPEN]
Function check_treffer()
       For alien.alien=Each alien
        for schuss.schuss = Each schuss
               if imagescollide(der,alien\aX,alien\aY, 0, shoot,schuss\Xpos,schuss\Ypos, 0) then
                  Delete schuss.schuss
                           Delete alien.alien
                           punkte = punkte + 100
             endif
        next                 
 Next
End Function


Wenn ich einen schuss los lasse gehts , aber bei 2 schuss genau hintereinander, die einen gegener treffen steigt der aus Shocked

StepTiger

BeitragSo, Aug 20, 2006 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
weil er den zweiten schuss für einen nicht existierenden alien prüft

müsste dann so heißen:
Code: [AUSKLAPPEN]
Function check_treffer()
   For alien.alien=Each alien
      for schuss.schuss = Each schuss
         if imagescollide(der,alien\aX,alien\aY, 0, shoot,schuss\Xpos,schuss\Ypos, 0) then
            Delete schuss.schuss
            Delete alien.alien
            punkte = punkte + 100
            goto nextalien
         endif
      next
   .nextalien
   Next
End Function
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Schranz0r

BeitragSo, Aug 20, 2006 21:58
Antworten mit Zitat
Benutzer-Profile anzeigen
und nochmal danke Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group