Basic Ghost

Spiele, Demos, Grafikzeug und anderes unterhaltendes.
Benutzeravatar
Marvin133
Beiträge: 80
Registriert: 25.01.2010 15:51
Computerausstattung: Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250
Kontaktdaten:

Basic Ghost

Beitrag von Marvin133 »

Dies ist mein aller erstes Jump n Run game nur die levels und gegner sind noch nicht verfügbar, aber trotzdem postet mal eure meinungen dazu.

Bild

Uploaded with ImageShack.us

32 Bit-Version-Download: http://purebasic-projekte.jimdo.com/downloads/
Zuletzt geändert von Marvin133 am 27.07.2010 08:39, insgesamt 6-mal geändert.
Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250

Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Basic Ghost

Beitrag von STARGÅTE »

könntest du ein ScreenShot machen.

Ich konnte zwar den Code kompilieren, sehe aber kein LEvel ...

Es fehlt zudem eine abfrage des WindowEvent() ... dadurch friert das Fenster ein ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Basic Ghost

Beitrag von RSBasic »

@STARGÅTE
Hab für ihn jetzt ein Screenshot upgeloadet.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Marvin133
Beiträge: 80
Registriert: 25.01.2010 15:51
Computerausstattung: Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250
Kontaktdaten:

Re: Basic Ghost

Beitrag von Marvin133 »

Entschuldige mich für den screenshot. bei mir hat das mit der print screen taste leider nicht geklappt.

Mfg. Marvin133 :)
Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250

Bild
Benutzeravatar
Marvin133
Beiträge: 80
Registriert: 25.01.2010 15:51
Computerausstattung: Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250
Kontaktdaten:

Re: Basic Ghost

Beitrag von Marvin133 »

So hier ist ein neues kleine update des spiels

http://em.q-soft.ch/files/get/4y-6ppfB4 ... -ghost.zip
Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250

Bild
Benutzeravatar
kswb73
Beiträge: 319
Registriert: 04.02.2008 16:51
Kontaktdaten:

Re: Basic Ghost

Beitrag von kswb73 »

Macht schon einen ganz netten Eindruck. Ich würde die Steine etwas später verschwinden lassen. (vielleicht auch mit zerbrech-Animiation). Ansonsten muss man die Leertaste die ganze Zeit gedrückt halten.
Des weiteren solltest du verhindern das man außerhalb des Bildschirmes springen kann. Das heißt du scrollst entweder die Karte oder du wechselst die Karte immer wenn der Spieler den Rand berührt.
Windows XP: PB 4.31, PB 4.4, PB 4.51
Open Suse 11.2: PB 4.4
Benutzeravatar
Marvin133
Beiträge: 80
Registriert: 25.01.2010 15:51
Computerausstattung: Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250
Kontaktdaten:

Re: Basic Ghost

Beitrag von Marvin133 »

Win 7 Home Premium 64 Bit \ PB 4.41 Demo\2.8Ghz QuadCore \4GB RAM\ nVidia GTS 250

Bild
Benutzeravatar
kswb73
Beiträge: 319
Registriert: 04.02.2008 16:51
Kontaktdaten:

Re: Basic Ghost

Beitrag von kswb73 »

Machst schon Fortschritte. Musik ist drin, neue Grafiken und was zum einsammeln.
Hier noch mal ein paar Verbesserungsvorschläge:
  • Mach entweder eine Begrenzung am Rand oder einen Kartenwechseln, sonst kann man einfach sinnlos aus dem Spielfeld springen
  • Man sollte Entweder auf der Röhe landen können oder dahinter, so das man einfach hervorlaufen kann und wie beim normalen Durchgehen an ein Ende gesetzt wird.
  • Mach die Anzeige oben links in die Ecke und nicht so weit davon weg. Außerdem würde ich sie etwas größer machen.
Dafür, dass du noch nicht so lange programmierst macht das ganze schon einen guten Eindruck (wenn ich an meine ersten Spiele denke). Ich jedenfalls drück dir die Daumen das für dein Projekt.
Windows XP: PB 4.31, PB 4.4, PB 4.51
Open Suse 11.2: PB 4.4
Benutzeravatar
Shadow-Gamer
Beiträge: 152
Registriert: 06.09.2009 13:31
Computerausstattung: NB: Intel P8700, Mobility ATI HD4650, 4GB, Win 7

Re: Basic Ghost

Beitrag von Shadow-Gamer »

ganz lustig gemacht^^

ich hatte allerdings das problem, das ich den boden nicht gesehen habe@ Windows 7 1366*768

und man geht immer durch das Rohr auch wenn man mitten drin steht und sich bewegt^^

lg
Ich versuche ja nicht faul zu sein. :)
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Re: Basic Ghost

Beitrag von Josef Sniatecki »

Habe ich es doch gewusst... Die Kollisionsabfrage scheitert bei dir :mrgreen:
Springe ich seitlich gegen eine Wand (z.B. die über dem Rohr), dann werde ich an die Decke positioniert, weil anscheinend nur "MoveY" bei der Abfrage unter Betracht genommen wird.

Nach ein wenig Denkarbeit habe ich einen Kollisionsalgorithmus zusammengebastelt, der mir bisher noch nie gemeckert hat:

Code: Alles auswählen

Enumeration 1 ;-> Danke für den Hinweis kswb73
  #Collision_Top ;Auf den Boden geklatscht
  #Collision_Bottom ;An die Decke gesprungen
  #Collision_Left ;Gegen die linke Wand gedonnert
  #Collision_Right ;Gegen die rechte Wand gedonnert
EndEnumeration

Procedure.i Collision(AX.f, AY.f, AWidth.f, AHeight.f, ADX.f, ADY.f, BX.f, BY.f, BWidth.f, BHeight.f)
  ;By Josef Sniatecki
  
  Protected M.f, Y.f
  
  If AX < BX + BWidth And AX + AWidth > BX And AY < BY + BHeight And AY + AHeight > BY
    If ADX > 0
      If ADY > 0
        M = ADY/ADX
        Y = AY - ((AX + AWidth) - BX)*M
        If Y + AHeight > BY
          ProcedureReturn #Collision_Left
        Else
          ProcedureReturn #Collision_Top
        EndIf
      ElseIf ADY < 0
        M = ADY/ADX
        Y = AY - ((AX + AWidth) - BX)*M
        If Y < BY + BHeight
          ProcedureReturn #Collision_Left
        Else
          ProcedureReturn #Collision_Bottom
        EndIf
      Else
        ProcedureReturn #Collision_Left
      EndIf
    ElseIf ADX < 0
      If ADY < 0
        M = ADY/ADX
        Y = AY + ((BX + BWidth) - AX)*M
        If Y > BY + BHeight - 1
          ProcedureReturn #Collision_Bottom
        Else
          ProcedureReturn #Collision_Right
        EndIf
      ElseIf ADY > 0
        M = ADY/ADX
        Y = AY + ((BX + BWidth) - AX)*M
        If Y + AHeight - 1 < BY
          ProcedureReturn #Collision_Top
        Else
          ProcedureReturn #Collision_Right
        EndIf
      Else
        ProcedureReturn #Collision_Right
      EndIf
    ElseIf ADY > 0
      ProcedureReturn #Collision_Top
    ElseIf ADY < 0
      ProcedureReturn #Collision_Bottom
    EndIf
  EndIf
  
  ProcedureReturn #False
EndProcedure
AX, AY, AWidth und AHeight sind die Position und Größe deines Spielers/Ghosts. ADX und ADY ist der Bewegungsvektor deines Spielers (in deinem Fall "MoveX" und "MoveY"). Logischerweise ist BX, BY, BWidth und BHeight die Position und Größe des Gegenstandes, mit dem du eine Kollisionsabfrage durchführen möchtest (also z.B. eine Wand). Falls sich dieser Gegenstand auch bewegt, musst du diesen Bewegungsvektor vom Bewegungsvektor des Spielers abziehen (also ADX - BDX und ADY - BDY (das ergibt sich, wenn man als Bezungssystem den Gegenstand wählt)).

Zum Algorithmus: Hier werden die Vorzeichen des Vektors (ADX,ADY) in betracht genommen. Je nach Kombination der Vorzeichen des X und Y Parameters werden zwei in Frage kommende Seiten genauer geprüft. Nun leite ich aus diesem Vektor eine lineare Funktion ab, indem ich die Steigung (M = ADY/ADX) berechne. Dadurch kann ich nun den Spieler in den Moment versetzen, an dem er nur den Gegenstand BERÜHRT hat, also quasi nicht mit diesem überlappt. Nun kann ich also genau prüfen, mit welcher Seite der Spieler gegen den Gegenstand kollidierte.

Das Ergebnis ist demnach eines der vier Konstanten aus dem "Enumeration"-Block.

Also kannst du folgendermaßen schnell und leicht eine genaue Kollision zwischen zwei Rechtecken (nicht unterschiedlich rotiert) berechnen:

Code: Alles auswählen

Select Collision(PlayerX, PlayerY, PlayerWidth, PlayerHeight, PlayerMoveX, PlayerMoveY, WallX, WallY, WallWidth, WallHeight)
  Case #Collision_Top
    PlayerY = WallY - PlayerHeight
    PlayerMoveY = 0
  Case #Collision_Bottom
    PlayerY = WallY + WallHeight
    PlayerMoveY = 0
  Case #Collision_Left
    PlayerX = WallX - PlayerWidth
    PlayerMoveX = 0
  Case #Collision_Right
    PlayerX = WallX + WallWidth
    PlayerMoveX = 0
EndSelect
Viel Spaß beim Einbauen :)

Gruß Josef

EDIT: Sehe gerade, dass die Kollision im obersten Download einwandfrei funktioniert. Wie ich sehe, hast du dass mit dem zweidiemnsionalen Tile-Array gelöst. Nur komisch das beim neuen Download immer so ein zurückzucken an dem Rohr entsteht.

EDIT2: Setzt man in Version 1.3 das Feld (3, 8 ) = 1, dann bemerkt man schnell, dass bei einer seitlichen Kollision etwas nicht stimmt.
Zuletzt geändert von Josef Sniatecki am 02.06.2010 18:27, insgesamt 1-mal geändert.
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Antworten