Collision in 2D

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

gigi

Betreff: Collision in 2D

BeitragFr, Okt 26, 2007 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich wollte eine(dachte ich) einfache Collision in 2D machen.Ich hatte mir überlegt zu prüfen ob der held mit der Landschaft collidiert, genauer: Ich male für einen undurchdringlichen Gegenstand immer dasselbe Bild, Tiles sozusagen. Zum Beispiel einen Fels. Den male ich an verschiedenen Stellen.Nun will ich allgemein prüfen ob der held mit diesem stein-Bild collidiert.Da dieses aber an mehreren Stellen gemalt wird kann ich bei Code: [AUSKLAPPEN]
ImageCollided(held\bild,held\x,held\y,stein,?,?)

natürlich nichts zu den Koordinaten von stein sagen. Ich bin ratlos....Was soll ich machen?
Anfänger Tut von mir:
http://www.blitzforum.de/forum...hp?t=26185
 

BlackTermi

BeitragFr, Okt 26, 2007 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Types benutzen und darin die steine speichern:


Code: [AUSKLAPPEN]


For s.stein = each stein

if ImagesCollided(held\bild,held\x,held\y,steinimage,s\x,s\y)

next



Den Rest kann man sich denken.

ToeB

Betreff: Re: Collision in 2D

BeitragFr, Okt 26, 2007 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
gigi hat Folgendes geschrieben:
Code: [AUSKLAPPEN]
ImageCollided(held\bild,held\x,held\y,stein,?,?)


Das ist Falsch, es müsste heißen :

Zitat:
ImagesCollide(held\bild,held\x,held\y,frame_held,stein,stein_x,stein_y,frame_stein)
sonst

1.: ekkent BB ihn Nicht als Befehl und
2.: gibt BB Fehler weil die Framen nicht angegeben sind.

Les dir mal auf www.blitzbase.de das Tut über Collision durch.

mfg Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

gigi

BeitragFr, Okt 26, 2007 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Crack ich hätte das schon richtig geschrieben, wäre es aus dem Code kopiert worden.Ist es aber nicht.
Mit den Frames hast du recht.Danke dafür.

BlackTermi ich habe keinen Zweifel daran das was du da geschrieben hast richtig ist aber ein Frage bitte.
Was bringt die ZeileCode: [AUSKLAPPEN]

For s.stein = each stein
???

Tankbuster

BeitragFr, Okt 26, 2007 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
For s.stein = each stein

Bedeutet so viel wie
Zitat:
Für (s.stein=)jeden stein

Also werden alle stein-Types abgefragt und können verändert werden Wink
Twitter
Download Jewel Snake!
Windows|Android
 

gigi

BeitragFr, Okt 26, 2007 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Tankbuster.
Embarassed

Hat jemand eine Idee wie ich das ohne for-next umsetzen kann?(Das funzt nämlich komischerweise net....)
 

Beatenvoy

BeitragMi, Okt 31, 2007 11:57
Antworten mit Zitat
Benutzer-Profile anzeigen
evtl :

Code: [AUSKLAPPEN]
For s.stein = each stein
    For h.held = each held
     ......
 

gigi

BeitragDo, Nov 01, 2007 20:49
Antworten mit Zitat
Benutzer-Profile anzeigen
OHNE For-Next-Schleife Exclamation Exclamation Exclamation

flona

BeitragDo, Nov 01, 2007 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du es mit Types machen willst wird es anders nur sehr umständlich gehen. Wink
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit
 

gigi

BeitragDo, Nov 01, 2007 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber das Problem ist ja gerade das genau das net funzt!(also das mit for-next.)
 

Dreamora

BeitragDo, Nov 01, 2007 21:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Könntest du den Problemcode posten und was nicht geht dabei?
Mangels göttlicher Eingabe kann man dir sonst nicht helfen Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Nov 01, 2007 21:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann hast du was falsch gemacht und solltest dich einen Tag mit Types beschäftigen, da diese sehr wichtig sind...
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

flona

BeitragDo, Nov 01, 2007 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann liegts aba am Code und nicht an For-next.
Poste mal den Code!
*edit*
Immer diese Zwei- und Dreifach Posts!
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit
 

gigi

BeitragDo, Nov 01, 2007 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
so sonderlich viel beeinhaltet der Code noch nicht.
Also,schweren Herzens,hier der ganze Code:Code: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer BackBuffer()
heldl=LoadAnimImage("herol.png",50,50,0,4)
heldr=LoadAnimImage("hero.png",50,50,0,4)
heldu=LoadAnimImage("herou.png",50,50,0,4)
heldo=LoadAnimImage("heroo.png",50,50,0,4) 
fels=LoadImage("Stein.png")
gras=LoadImage("gras.png")
baum=LoadImage("baum.png")
graszeiger=LoadImage("Gras-Zeiger.png")
wego=LoadImage("wego.png")
wegu=LoadImage("wegu.png")
warten=10
grasx=0
grasy=0
wegx=0
wegy=0
map$="Weg"
Type hindernis
Field x
Field y
Field bild
Field frame
End Type
stein.hindernis=New hindernis
stein\x=250
stein\y=0
stein\bild=fels
Type figur
Field x
Field y
Field zx
Field zy
Field anim
Field leben
Field bild
Field laufen
End Type
Global held.figur
held.figur=New figur
held\y=250
held\zy=250
held\bild=heldr
held\anim=0
held\laufen=0
Function tilelinex(bild,wertx,werty,anfang,ende)
For wertx=anfang To ende Step 50
DrawImage bild,wertx,werty
Next
End Function
Function tileliney(bild,wertx,werty,anfang,ende)
For werty=anfang To ende Step 50
DrawImage bild,wertx,werty
Next
End Function
;Hauptschleife
While Not KeyHit(1)
Cls
If held\laufen=1 Then
warten=warten-1
EndIf
If held\anim=3 And warten=0 And held\laufen=1 Then
held\anim=0
warten=5
EndIf
If held\anim<3 And warten=0 And held\laufen=1 Then
held\anim=held\anim+1
warten=5
EndIf
If KeyDown(203) And held\laufen=0 And held\x>0 Then
held\zx=held\x-50
held\bild=heldl
EndIf
If KeyDown(205) And held\laufen=0 And held\x<750 Then
held\zx=held\x+50
held\bild=heldr
EndIf
If KeyDown(200) And held\laufen=0 And held\y>0 Then
held\zy=held\y-50
held\bild=heldo
EndIf
If KeyDown(208) And held\laufen=0 And held\y<550 Then
held\zy=held\y+50
held\bild=heldu
EndIf
If held\y<held\zy Then
held\y=held\y+2
held\laufen=1
EndIf
If held\y>held\zy Then
held\y=held\y-2
held\laufen=1
EndIf
If held\x<held\zx Then
held\x=held\x+2
held\laufen=1
EndIf
If held\x>held\zx Then
held\x=held\x-2
held\laufen=1
EndIf
If held\x=held\zx And held\y=held\zy Then
held\laufen=0
EndIf
Delay 10
If map$="Weg" Then
tilelinex(stein\bild,stein\x,0,0,800)
tilelinex(gras,grasx,50,0,800)
tilelinex(gras,grasx,100,0,800)
tilelinex(gras,grasx,150,0,800)
tilelinex(gras,grasx,200,0,800)
tilelinex(wego,wegx,250,0,800)
tilelinex(wegu,wegx,300,0,800)
tilelinex(gras,grasx,350,0,800)
tilelinex(gras,grasx,400,0,800)
tilelinex(gras,grasx,450,0,800)
tilelinex(gras,grasx,500,0,800)
tilelinex(gras,grasx,550,0,800)
DrawImage graszeiger,600,200
DrawImage baum,100,50
DrawImage baum,500,350
EndIf
For stein.hindernis=Each hindernis
If ImagesCollide(held\bild,held\x,held\y,held\anim,stein\bild,stein\x,stein\y,0) Then
Text 200,300,"Kollision"
EndIf
Next
DrawImage held\bild,held\x,Held\y,held\anim
Flip
Wend
End

Tornado11

BeitragDo, Nov 01, 2007 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Argh, rücke doch den Code ein!
So hat doch keiner die Lust das Zeugs anzuschauen(Und es ist unübersichtliche)
 

gigi

BeitragDo, Nov 01, 2007 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich dachte euch würde der ganze Code mehr interessieren.Aber bitte:Code: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer BackBuffer()
warten=10
grasx=0
grasy=0
wegx=0
wegy=0
map$="Weg"
Type hindernis
Field x
Field y
Field bild
Field frame
End Type
stein.hindernis=New hindernis
stein\x=250
stein\y=0
stein\bild=fels
;Hauptschleife
While Not KeyHit(1)
Cls
For stein.hindernis=Each hindernis
If ImagesCollide(held\bild,held\x,held\y,held\anim,stein\bild,stein\x,stein\y,0) Then
Text 200,300,"Kollision"
EndIf
Next
DrawImage held\bild,held\x,Held\y,held\anim
Flip
Wend
End


Wenn ich das mit For-Next weglasse funzt das. er gibt die Fehlermeldung"Object does not exist" bei Tilelinex(stein...)

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Nov 01, 2007 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit 'einrücken' ist sowas hier gemeint:
edit1: Sonst keine Korrekturen durchgeführt :edit1

Code: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer BackBuffer()

heldl=LoadAnimImage("herol.png",50,50,0,4)
heldr=LoadAnimImage("hero.png",50,50,0,4)
heldu=LoadAnimImage("herou.png",50,50,0,4)
heldo=LoadAnimImage("heroo.png",50,50,0,4)
fels=LoadImage("Stein.png")
gras=LoadImage("gras.png")
baum=LoadImage("baum.png")
graszeiger=LoadImage("Gras-Zeiger.png")
wego=LoadImage("wego.png")
wegu=LoadImage("wegu.png")
warten=10
grasx=0
grasy=0
wegx=0
wegy=0
map$="Weg"

Type hindernis
   Field x
   Field y
   Field bild
   Field frame
End Type

stein.hindernis=New hindernis
stein\x=250
stein\y=0
stein\bild=fels

Type figur
   Field x
   Field y
   Field zx
   Field zy
   Field anim
   Field leben
   Field bild
   Field laufen
End Type

Global held.figur

held.figur=New figur
held\y=250
held\zy=250
held\bild=heldr
held\anim=0
held\laufen=0

Function tilelinex(bild,wertx,werty,anfang,ende)
   For wertx=anfang To ende Step 50
      DrawImage bild,wertx,werty
   Next
End Function

Function tileliney(bild,wertx,werty,anfang,ende)
   For werty=anfang To ende Step 50
      DrawImage bild,wertx,werty
   Next
End Function




;Hauptschleife
While Not KeyHit(1)
   Cls
   
   If held\laufen=1 Then
      warten=warten-1
   EndIf
   
   If held\anim=3 And warten=0 And held\laufen=1 Then
      held\anim=0
      warten=5
   EndIf
   
   If held\anim<3 And warten=0 And held\laufen=1 Then
      held\anim=held\anim+1
      warten=5
   EndIf
   
   If KeyDown(203) And held\laufen=0 And held\x>0 Then
      held\zx=held\x-50
      held\bild=heldl
   EndIf
   
   If KeyDown(205) And held\laufen=0 And held\x<750 Then
      held\zx=held\x+50
      held\bild=heldr
   EndIf
   
   If KeyDown(200) And held\laufen=0 And held\y>0 Then
      held\zy=held\y-50
      held\bild=heldo
   EndIf
   
   If KeyDown(208) And held\laufen=0 And held\y<550 Then
      held\zy=held\y+50
      held\bild=heldu
   EndIf
   
   If held\y<held\zy Then
      held\y=held\y+2
      held\laufen=1
   EndIf
   
   If held\y>held\zy Then
      held\y=held\y-2
      held\laufen=1
   EndIf
   
   If held\x<held\zx Then
      held\x=held\x+2
      held\laufen=1
   EndIf
   
   If held\x>held\zx Then
      held\x=held\x-2
      held\laufen=1
   EndIf
   
   If held\x=held\zx And held\y=held\zy Then
      held\laufen=0
   EndIf
   
   Delay 10
   
   If map$="Weg" Then
      tilelinex(stein\bild,stein\x,0,0,800)
      tilelinex(gras,grasx,50,0,800)
      tilelinex(gras,grasx,100,0,800)
      tilelinex(gras,grasx,150,0,800)
      tilelinex(gras,grasx,200,0,800)
      tilelinex(wego,wegx,250,0,800)
      tilelinex(wegu,wegx,300,0,800)
      tilelinex(gras,grasx,350,0,800)
      tilelinex(gras,grasx,400,0,800)
      tilelinex(gras,grasx,450,0,800)
      tilelinex(gras,grasx,500,0,800)
      tilelinex(gras,grasx,550,0,800)
      DrawImage graszeiger,600,200
      DrawImage baum,100,50
      DrawImage baum,500,350
   EndIf
   
   For stein.hindernis=Each hindernis
      If ImagesCollide(held\bild,held\x,held\y,held\anim,stein\bild,stein\x,stein\y,0) Then
         Text 200,300,"Kollision"
      EndIf
   Next
   
   DrawImage held\bild,held\x,held\y,held\anim
   Flip
Wend
End
 

gigi

BeitragFr, Nov 02, 2007 0:29
Antworten mit Zitat
Benutzer-Profile anzeigen
aso.... Embarassed

Schade das keiner weiter weiß....Falls doch-Nur Sagen!!!

kriD

Betreff: vermutung

BeitragFr, Nov 02, 2007 13:34
Antworten mit Zitat
Benutzer-Profile anzeigen
ich bin mir nich sicher, aber vlt müsstes so heißen:
Code: [AUSKLAPPEN]
ImagesCollide(held\bild,held\x,held\y,held\anim,stein\bild,stein\x,stein\y,1)

oder so:
Code: [AUSKLAPPEN]
ImagesCollide(held\bild,held\x,held\y,held\anim,stein\bild,stein\x,stein\y,stein\anim)


MfG kriD
Wenn ich du wäre, wäre ich lieber ich!

Eingeproggt

BeitragFr, Nov 02, 2007 14:31
Antworten mit Zitat
Benutzer-Profile anzeigen
kriD hat iwie Recht, iwie nicht.

Also das Steinbild "fels" ist kein AnimImage (und wenn es eines wäre bräuchte man \frame anstatt \anim)

Allerdings fängt man bei 0 an zu zählen. Also ich würd schreiben:

Code: [AUSKLAPPEN]
ImagesCollide(held\bild,held\x,held\y,held\anim,stein\bild,stein\x,stein\y,0)


mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group