Achtung die Kurve ...

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Dima150

Betreff: Achtung die Kurve ...

BeitragFr, Okt 26, 2007 21:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo ... Ich weiss leider nicht in welches Forum es kommt, also habe ich es hier rein geschrieben.
Ich bin neu hier und wollte euch mal eine Frage stellen. Sicher kennt ihr das Spiel "Achtung die Kurve" nicht oder ? Für alle, die Interesse daran haben, können es hier downloaden : http://games.acont.de/Download/32.html Ich will dieses Spiel selber mit Blitz Basic 2D machen aber mir gelingt es nie die Collision der einzelnen Striche hinzubekommen. Hat jemand einen Rat ?

darth

BeitragFr, Okt 26, 2007 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
nun, wieviel ahnung hast du von vektorgeometrie?
du könntest die geradengleichung der linie verwenden (ist ja 2d) und den abstand der beiden geraden berechnen (HNF), wenn der zu klein wird gibts ne kollision.
wird komplizierter wenns rund ist, aber ist machbar...
Diese Signatur ist leer.
 

Dima150

BeitragFr, Okt 26, 2007 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Vektorgeometrie ?? Tut mir Leid da kann ich dich nur enttäuschen ... Damit kenne ich mich nichts aus. Am Anfang habe ich erst versucht das Collisieren mit Getcolor() zu machen aber daraus wurde nichts. Gibt es vll. etwas leichteres als Vektorgeometrie ?

Silver_Knee

BeitragSa, Okt 27, 2007 0:33
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm getcolor is'n bisschen lahm aber der ansatz wär doch gut

lass mit plot oder oval ne image vollkrizzeln und dann fragen If ReadPixel(zukünftige koordinaren)<>0 then make gameover^^ oder sowas in der art bei oval muss den zukünftigen variablen noch der radius draufgerechnet werden aber sonst ist die "grafische lösung des problems" nicht unbedingt schlechter als die Rechnerische zudem die rechnerische deie ganzen daten von 8linien mit kurven etc berücksichtigen müsste da ist es zum ende hin besser nurnch die graka zu fragen "ist da was gemalt??"

Shogo

BeitragSa, Okt 27, 2007 1:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Kleine Idee von mir.

Fuer die Spielfiguren nimmst du Bilder also einfach einen Greiss. Und dann erstellst du noch ein Bild das so gross ist wie dein Spielfeld. Die Zurueckgelegte Strecke der Spielfiguren zeichnest du auf dem grossen bild ein dann muesstest du die kollisionen mit Blitz abfragen koennen.

Shogo

Edit:

Es hat mich mal Interessiert deshalb hab ichs mal schnell Ausprobiert, ist etwas sehr langsam wenn man so ein grosses Bild auf nee Kollision ueberprueft. Habs dann nur einen Bildausschnitt mit Copyrect ueberprueft was es sehr viel schneller macht.

Code: [AUSKLAPPEN]
Graphics 800, 600, 32, 2
ClsColor 80, 40, 255

Global hintergrund = CreateImage(800, 600); Erstellt Hintergrund
MaskImage hintergrund, 0, 0, 0

Global spieler = CreateImage(5, 5); Erstellt Spieler
MaskImage spieler, 0, 0, 0

Global vergleich = CreateImage(5, 5); Bild fuer die Kollisionskontrolle
MaskImage vergleich, 0, 0, 0

SetBuffer ImageBuffer(spieler)
Color 0, 255, 0
Oval 0, 0, 5, 5

Global richtung = 0
Global x# = 400, y# = 300; Koordinaten der Spielfigur
Global collide
Global warten; fuer denn Timer

SetBuffer BackBuffer()

Repeat

timer = MilliSecs()
If timer > warten Then
   warten = timer + 10
   
   Cls
   
   ; Steuerung
   If KeyDown(203) Then richtung = richtung - 1
   If KeyDown(205) Then richtung = richtung + 1
   
   If richtung = -1 Then richtung = 359
   If richtung = 360 Then richtung = 1
   
   ; Auf Hintergrund Zeichnen
   SetBuffer ImageBuffer(hintergrund)
   Color 255, 0, 0
   Oval x - Cos(richtung) * 6, y - Sin(richtung) * 6, 5, 5
   
   ; Teil des hintergrundes wird fuer die Kollisionsabfrage kopiert
   ;GRABIMAGE vergleich, x, y
   CopyRect x, y, 5, 5, 0, 0, ImageBuffer(hintergrund), ImageBuffer(vergleich)
   
   SetBuffer BackBuffer()
   
   ;Kollisionsabfrage
   If IMAGESCOLLIDE(vergleich, 0, 0, 0, spieler, 0, 0, 0) = 1 Then collide = 1
   
   ;Text ausgeben
   Color 255, 0, 0
   If collide = 1 Then Text 0, 0, "Es hat gekracht"
   
   ; Aktualisiert Spieler
   x = x + Cos(richtung)
   y = y + Sin(richtung)
   
   
   DrawImage hintergrund, 0, 0; Zeichnet Hintergrund
   DrawImage spieler, x, y; zeichnet Spieler
   
   Flip
   
End If

Until KeyHit(1)


Hab nur ein Problem wenn ich denn Bildausschnitt mit Grabimage Kopiere macht er die Kollisionsabfrage nicht ist das ein Bug oder hab ich was uebersehen?

Lunatix

BeitragSa, Okt 27, 2007 8:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Seh ich das richtig das da nur Linien und Farben sind?

Dann mach einfach ein Dim Feld:

Code: [AUSKLAPPEN]

Graphics 320,240

Dim Position(320,240)


Wenn ein Spieler sich bewegt wird auf dessen position seine Farbe gespeichert:
Code: [AUSKLAPPEN]

position(player_x,player_y) = playercolor


Kollision kannst du dann prüfen mit
Code: [AUSKLAPPEN]

if isCollided(player_x,player_y)
  gameover()
endif

function isCollided(x%,y%)
  return position(x,y) > 0
end function


[/code]
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...
 

Dima150

BeitragSa, Okt 27, 2007 10:58
Antworten mit Zitat
Benutzer-Profile anzeigen
WOW !!! Danke, dass ihr mir so schnell geholfen habt. Shogos Programm funktioniert ja ganz gut ! Danke ... Jetzt habe ich einige Ansätze, womit ich mein Programm schreiben könnte. Very Happy Very Happy Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group