Kollisionsfrage
Übersicht

Bloxel93Betreff: Kollisionsfrage |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Blitzbasic community,
Ich habe vor kurzem angefangen programmieren zu lernen und wollte dies mit blitzbasic tun. Ich beschäftige mich noch nich lange damit deswegen habt bitte nachsicht ![]() Jedenfalls ist mein Problem folgendes(2D-Game): Ich habe einen Spieler(eine kugel) den man frei auf dem screen bewegen kann. Hinzu habe ich ein objekt eingebaut (ein stein) und es mit einer for schleife mehrfach auf dem screen (immer zufällig) verteilt. Nun habe ich eine kollision mit diesem objekt eingebaut das wenn der Spieler mit dem Objekt kollidiert es die gleiche geschwindigkeit hat und in die gleiche richtung geht wie der Spieler. Dies geschieht mit allen objekten die zufällig verteilt sind und ich kann auch mehrere gleichzeitig verschieben und nun wollte ich fragen wie ich es schaffe dass nur das erste objekt das ich berühre bewegt wird und währenddessen die anderen objekte nicht mehr bewegt werden können bzw dass diese dann eine art wand sind also man kann nicht durch sie durch und auch nicht bewegen. Hier ist der Code wie er derzeitig ist: Code: [AUSKLAPPEN] ;----[Grundbau]----
Global xmax=1100,ymax=760 Global frametimer=CreateTimer(60) Graphics xmax,ymax,32,2 SetBuffer BackBuffer() SeedRnd MilliSecs() ClsColor 70,100,160 ;----[Graphiken]---- Global Spieler=LoadImage("Graphiken\Kreis.bmp") MidHandle Spieler MaskImage Spieler,255,255,255 Global Stein =LoadImage("Graphiken\Stein.bmp") MidHandle Stein MaskImage Stein ,255,255,255 ;----[Variablen]---- Global xBewegung Global yBewegung Global xSp# =xmax/2; X-Position des Spielers Global ySp# =ymax/2; Y-Postiion des Spielers ;----[Types]---- Type Position Field nr ; Objekt Nummer Field xSt ; X-Position des Steins Field ySt ; Y-Position des Steins End Type For S=0 To 3 Steine.Position = New Position Steine\xSt = Rnd(0,1000) Steine\ySt = Rnd(0,500) Next ;----[Hauptschleife]---- Repeat WaitTimer frametimer ;---[Kollision]--- ;--[Kollision mit Stein]-- DrawImage Spieler,xSp,ySp For Steine.Position= Each Position DrawImage Stein,Steine\xSt,Steine\ySt If ImagesCollide (Spieler,xSp,ySp,0,Stein,Steine\xSt,Steine\ySt,0) Then Text 10, 50, "kollision" Steine\xSt=Steine\xSt+xbewegung Steine\ySt=Steine\ySt+ybewegung If Steine\xSt<xmax-xmax+17 Then Steine\xSt=xmax-xmax+17 xSp=Steine\xSt+31 EndIf If Steine\xSt>xmax-17 Then Steine\xSt=xmax-17 xSp=Steine\xSt-31 EndIf If Steine\ySt<ymax-ymax+17 Then Steine\ySt=ymax-ymax+17 ySp=Steine\ySt+31 EndIf If Steine\ySt>ymax-17 Then Steine\ySt=ymax-17 ySp=Steine\ySt-31 EndIf EndIf Next ;--[Kollision mit Stein]-- ;--[Kollision mit Rahmen]-- If xSp<xmax-xmax+12.5 Then xsP=xmax-xmax+12.5 EndIf If xSp>xmax-12.5 Then xSp=xmax-12.5 EndIf If ySp<ymax-ymax+12.5 Then ySp=ymax-ymax+12.5 EndIf If ySp>ymax-12.5 Then ySp=ymax-12.5 EndIf ;--[Kollision mit Rahmen]-- ;---[Kollision]--- ;---[Bewegung]--- xbewegung = 0 ybewegung = 0 If KeyDown(203) Then ; pfeiltaste links xBewegung=-3 xSp=xSp+xBewegung EndIf If KeyDown(205) Then ; pfeiltaste rechts xBewegung=3 xSp=xSp+xBewegung EndIf If KeyDown(200) Then ; pfeiltaste oben yBewegung=-3 ySp=ySp+yBewegung EndIf If KeyDown(208) Then ; pfeiltaste unten yBewegung=3 ySp=ySp+yBewegung EndIf Text 10,10, "y1Bewegung:"+yBewegung Text 10,25, "x2Bewegung:"+xBewegung ;---[Bewegung]--- Flip Cls Until KeyHit(1) End Danke in voraus für jede hilfreiche Antwort Gruß Bloxel |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Willkommen.
Du möchtest, dass die Steine aneinander hängen bleiben? Du müsstest den vom Spieler bewegten Stein auf Kollision mit jedem anderen Stein testen und dann nur bewegen, wenn nichts im weg ist. Das ginge sehr viel einfacher mit einer Tilemap anstatt frei beweglicher Objekte. Generelle Hinweise: "ymax-ymax" ist immer 0, da kannst du einiges weg kürzen. Einen timer benutzt du schon, jetzt solltest du nur noch Flip(0) benutzen. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Addi |
![]() Antworten mit Zitat ![]() |
---|---|---|
https://www.blitzforum.de/foru...hp?t=38505
Da geht es um Kollision mit Stacheln. Ist ungefähr das Gleiche wie bei deinem Problem Mfg. Addi |
||
BP/B3D/BMax : Lerne Java : Früher mal Lite-C : Gewinner BCC 62 |
Bloxel93 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ah also das mit der tilemap werde ich mir mal angucken aber das mit den linien schneiden ist auch sehr hilfreich im anderen thread ...nach sowas hatte ich auch gesucht nur was mache ich wenn mein Spieler kein viereck is also keine eindeutige seite besitzt ?...ich glaub ich wüsste schon was also dass man das bild was man steuern kann in eine durchsichtige Box sozusagen steckt(also das man trotzdem den hintergrund sieht auch wenn das von der Quadratfläche eingeschlossen wird) wie es auch bei vielen anderen spielen ist halt ne hitbox ... gibts dafür n speziellen befehl ?
Danke aufjedenfall schonmal |
||
Bloxel93 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ehm könntest du nochma genau sagen was du mit tilemaps meinst ? ich hab den begriff an sich noch nicht gehört ^^ hab da grad iwie was mit arrays gelesen find nich wirklich viel. Hast du vll einen Link der mir erklärt was du meinst ? wäre echt nett | ||
![]() |
Johannes´ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst in einem Bild eine Farbe als transparent setzen, normalerweise sollte dies ganz schwarz sein (dazu: MaskImage![]() Ein guter Befehl zum Überprüfen dieser Kollisionsart bei einem Kollisionskasten wäre ImagesOverlap ![]() Zu der Tilemap liefert dir die Suche hier im Forum sicherlich Ergebnisse, ansonsten Google: http://lmgtfy.com/?q=Tilemap. |
||
- Zuletzt bearbeitet von Johannes´ am Mo, Apr 30, 2012 19:14, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schau dir mal die Robsite RPG-Tutorials an siehe da. Die sind schon älter, aber sollten Kollisions behandeln.
Wie du dein Programm strukturieren solltest, hängt davon ab, was du erreichen willst... Bitte gewöhne dir an, Beiträge zu editieren, doppelposting ist nicht erwünscht - danke. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Addi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe mal ein Youtube Tutorial gefunden was mir vor 3 Jahren auch sehr geholfen hat:
http://www.youtube.com/watch?v...ure=relmfu Thema ist da, das Schreiben eines Jump & Runs. Hoffe du kannst ausreichend Englisch ![]() Ps: Soll keine Werbung sein ![]() |
||
BP/B3D/BMax : Lerne Java : Früher mal Lite-C : Gewinner BCC 62 |
Bloxel93 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die Antworten ham mir aufjedenfall geholfen... ich arbeite nicht so oft am programmieren deswegen kommt der post so spät ... das tutorial scheint eine gute hilfe zu sein auch wenn ich es öfters hören muss ums richtig zu verstehen ![]() |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Solange es noch der gleiche Code ist, spricht nichts dagegen, die Fragen dazu hier zu sammeln. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group