Kollision mit Speed
Übersicht

![]() |
ToeBBetreff: Kollision mit Speed |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo !
Ich progge grad sowas hier. Jetzt bin ich bei der Collision und hab keine ahnung wies weiter gehen soll. Code: [AUSKLAPPEN] Graphics 800,600,16,1
SetBuffer BackBuffer() ;// Die Variablen für die Positon etc. : Global x#,y#,sx#,sy#,ox#,oy# Global Leben = 3, Schild = 100 Global start ;// Sonstige Variablen : ;Global timer = CreateTimer(60) Global fd_frame,fd_fms = MilliSecs() ;// Konstanten für Schwerkraf etc. : Const grav# = 0.01,speed# = 0.02 ;// Images Laden : Global ship = LoadImage("gfx\Ship.png"):MaskImage ship,255,0,255 Global fire_Down = LoadAnimImage("gfx\flame_down.png",17,20,0,5):MaskImage Fire_down,255,0,255 Global map ;// Arrays : ;// Einstellungen : HidePointer() SeedRnd MilliSecs() LoadLevel(1) ;//Schleife : Repeat ox# = x# oy# = y# DrawImage map,0,50 Text 1,1,"Schild : "+Schild Text 1,13,"Leben : "+Leben Text 1,26,"SpeedX : "+sx+" / SpeedY : "+sy ;// Steuerung : If KeyDown(200) Then sy = sy - speed If fd_fms <= MilliSecs() - 100 And fd_frame < 4 Then fd_frame = fd_frame + 1 fd_fms = MilliSecs() EndIf start = 1 Else sy = sy + grav If fd_fms <= MilliSecs() - 100 And fd_frame > -1 Then fd_frame = fd_frame - 1 fd_fms = MilliSecs() EndIf EndIf If Abs(sy) < 0.01 And start = 1 Then start = 0 sx = sx + (KeyDown(205) - KeyDown(203)) * speed If start = 1 If ImageRectCollide(map,0,50,0,x+2,y-1,21,1) Then Schild = Schild - Abs(sy)*5:sy = sy * -0.5:y = y + 2 If ImageRectCollide(map,0,50,0,x+2,y+31,21,1) Then Schild = Schild - Abs(sy)*5:sy = sy * -0.5:y = y - 2 If ImageRectCollide(map,0,50,0,x+26,y+2,1,26) Then Schild = Schild - Abs(sx)*5:sx = sx * -0.5:x = x - 2 If ImageRectCollide(map,0,50,0,x-1,y+2,1,26) Then Schild = Schild - Abs(sx)*5:sx = sx * -0.5:x = x + 2 EndIf If sx > 5 Then sx = 5 If sx <-5 Then sx =-5 If sy > 5 Then sy = 5 If sy <-5 Then sy =-5 ;// Positionen Berechnen : x = x + sx y = y + sy ;// Grafik Malen : DrawImage ship,Int(x),Int(y) If fd_frame > -1 DrawImage fire_down,Int(x)+4,Int(y)+30,fd_frame ;// Grafik Updaten : ;WaitTimer(timer) Flip Cls ;// Schleifen beenden wenn Escape Until KeyHit(1) ;// Programm beenden : End ;// Functionen : ;// CreateMap für Mapimage erstellen : Function LoadLevel(Nr) dat = ReadFile("Maps\Map"+Nr+".map") tex = ReadInt(dat) x = ReadInt(dat) y = ReadInt(dat) + 50 If dat <> 0 Then grab = LoadImage("gfx\MapTexture2.png") img = CreateImage(GraphicsWidth(),GraphicsHeight()-50) SetBuffer ImageBuffer(img) LockBuffer ImageBuffer(img) WritePixelFast(0,0,0) black = ReadPixelFast(0,0) UnlockBuffer ImageBuffer(img) Color 255,255,255 Color 255,0,255:Rect 0,0,1000,1000:Color 0,0,0 For xx = 0 To 15 For yy = 0 To 10 byte = ReadByte(dat) If byte = 1 Then Rect xx*50,yy*50,50,50 EndIf Next Next back = CreateImage(ImageWidth(img),ImageHeight(img)) SetBuffer ImageBuffer(back) TileBlock grab LockBuffer ImageBuffer(img) LockBuffer ImageBuffer(back) For xx = 0 To ImageWidth(img) - 1 For yy = 0 To ImageHeight(img) - 1 pix = ReadPixelFast(xx,yy,ImageBuffer(img)) If pix = black Then ;Wenn Schwarz ... aa = 1 WritePixelFast(xx,yy,ReadPixelFast(xx,yy,ImageBuffer(back)),ImageBuffer(img)) EndIf Next Next UnlockBuffer ImageBuffer(img) UnlockBuffer ImageBuffer(back) MaskImage img,255,0,255 Color 255,255,255 SetBuffer BackBuffer() While Not ImageRectCollide(img,0,50,0,x,y,25,30) y = y + 1 Wend start = 0 Schild = 100 map = CopyImage(img) FreeImage img FreeImage back FreeImage grab Else Return 0 EndIf End Function Ich will die Collision genau wie in dem Spiel (Link). Wie mach ich dass ? Danke schonmal... |
||
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! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
In 2D kannst du dir eine Minitileengine schreiben und nur auf die möglichen 4 Felder nach pixelgenauer Kollisions überprüfen. Dazu dann die Raumschiffposition skalliert auf die Dim-Map übertragen und überprüfen.
In 3D kannst du es mithilfe Kollisionsflächen machen. Dazu müsstest du dir eine Miniquadengine schreiben die zudem an den Aussenkanten Kollisionsquad aufweist. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich hab garkeine Tiles ^^ ich erstelle ein Bild von der Map und überprüf die Dann....
Trotzdem danke... |
||
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! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst natürlich auch ein Bildschirmfüllendes Hintergrundbild (in deinem Beispiel 800x600) nehmen und auf dieser eine Pixelgenaue Kollisionsprüfung machen. Doch wird es nicht sonderlich schnell sein fürchte ich (recourcenmässig).
Pixelgenaue Kollision kannst du mit ql:ImagesCollide machen. Dabei muss aber die ''transparente'' Farbe gemaskt sein. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also das hört sich jetzt an als wär ich blöd ^^...
Guck mal hier : Mein Code hat Folgendes geschrieben: If ImageRectCollide(map,0,50,0,x+2,y-1,21,1) Then Schild = Schild - Abs(sy)*2:sy = sy * -0.5:y = y + Abs(sy)
If ImageRectCollide(map,0,50,0,x+2,y+31,21,1) Then Schild = Schild - Abs(sy)*2:sy = sy * -0.5:y = y - Abs(sy) If ImageRectCollide(map,0,50,0,x+26,y+2,1,26) Then Schild = Schild - Abs(sx)*2:sx = sx * -0.5: x = x - Abs(sx) If ImageRectCollide(map,0,50,0,x-1,y+2,1,26) Then Schild = Schild - Abs(sx)*2:sx = sx * -0.5: x = x + Abs(sx) ![]() |
||
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! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ql:ImageRectCollide <> ql:ImagesCollide | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group