Collision in 2D
Übersicht

gigiBetreff: Collision in 2D |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
||
![]() |
ToeBBetreff: Re: Collision in 2D |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
gigi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke Tankbuster.
![]() Hat jemand eine Idee wie ich das ohne for-next umsetzen kann?(Das funzt nämlich komischerweise net....) |
||
Beatenvoy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
evtl :
Code: [AUSKLAPPEN] For s.stein = each stein
For h.held = each held ...... |
||
gigi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
OHNE For-Next-Schleife ![]() ![]() ![]() |
||
![]() |
flona |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du es mit Types machen willst wird es anders nur sehr umständlich gehen. ![]() |
||
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit |
gigi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Aber das Problem ist ja gerade das genau das net funzt!(also das mit for-next.) | ||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Könntest du den Problemcode posten und was nicht geht dabei?
Mangels göttlicher Eingabe kann man dir sonst nicht helfen ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Argh, rücke doch den Code ein!
So hat doch keiner die Lust das Zeugs anzuschauen(Und es ist unübersichtliche) |
||
gigi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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...) |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
aso.... ![]() Schade das keiner weiter weiß....Falls doch-Nur Sagen!!! |
||
![]() |
kriDBetreff: vermutung |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group