Collision mit Terrain

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

DarkDragon-1993

Betreff: Collision mit Terrain

BeitragMi, Nov 26, 2008 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe eine Art Sternenhimmel erstellt, bei dem die riesigen Sterne vom Himmel herabgerast kommen sollen. Und zwar genau auf den Spieler. Die Sterne werden hierbei von Kugeln repräsentiert.

Hier nun das Problem:
Später hinaus wollte ich bei Collisionen Explosionen einbauen, aber es klappt nicht, da die Sterne nie wirklich mit dem Terrain zusammenstoßen. Daher kann ich auch keine Explosionen einbauen.
Code ist so zirka
Code: [AUSKLAPPEN]
Collisions type_star, type_terrain, 2, 2
... ;Hier was ausgelassen
While Not KeyHit( 1 )
  For s.star = New star
    If s\countdown <= 0 then
      MoveEntity s\star, 0, 0, 1
      s\deathtime = s\deathtime - 0.01
    Endif
    If EntityCollided( s\star_copy, type_terrain ) then
      s\deathtime = 120
      s\countdown = s\startcountdown
    Endif
    If s\deathtime <= 0 then
      s\deathtime = 120
      s\countdown = s\startcountdown
    Endif
  Next
  RenderWorld
  UpdateWorld
Wend


Das ist alles nur so grob. Die Sterne werden nach dem "Tod" wieder an ihre ursprüngliche Stellung gesetzt und so weiter. Hab hier vieles ausgelassen. Wenn ich den ganzen Code posten soll, werd ich ihn morgen posten.
Danke schonmal im Vorraus, DarkDragon-1993
 

martin_moehler

Betreff: Frage verbessern

BeitragMi, Nov 26, 2008 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
ich denke der Code den du gepostet hast müsste richtig sein, nur dein Problem ist nicht sehr genau beschrieben!
Zitat:
[...] da die Sterne nie wirklich mit dem Terrain zusammenstoßen.

Bedeutet das, dass sie schon vorher zurückgesetzt werden und gar nicht beim Terrain ankommen, oder das die Kollision nicht richtig abgefragt wird?

Der_Schläfer

BeitragMi, Nov 26, 2008 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
biete drei mögliche-fehler-fragen Wink

-hast du den sternen und dem terrain nen entitytype gegeben?
-ist das terrain evtl. mit entityfx 16 versehen? (kollisionen funktionieren nämlich trotzdem nur in eine richtung)
-bist du sicher dass keine kollision stattfindet und der code einfach nichts gescheites macht im falle einer kollision?


aussserdem ist dein setup komisch weil:
normalerweise benutzt "man" (ich) in b3d die y richtung als höhe (damit geladene terrains nicht erst noch gedreht werden müssn), ich würde die sterne dann mit moveentity 0,-1,0 runterklatschen lassen.

und ja, mehr code bitte ^^

mfg
 

DarkDragon-1993

BeitragFr, Nov 28, 2008 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Der_Schläfer hat Folgendes geschrieben:
biete drei mögliche-fehler-fragen Wink

-hast du den sternen und dem terrain nen entitytype gegeben?
-ist das terrain evtl. mit entityfx 16 versehen? (kollisionen funktionieren nämlich trotzdem nur in eine richtung)
-bist du sicher dass keine kollision stattfindet und der code einfach nichts gescheites macht im falle einer kollision?


aussserdem ist dein setup komisch weil:
normalerweise benutzt "man" (ich) in b3d die y richtung als höhe (damit geladene terrains nicht erst noch gedreht werden müssn), ich würde die sterne dann mit moveentity 0,-1,0 runterklatschen lassen.

und ja, mehr code bitte ^^

mfg


1. Beides ja
2. Nein
3. ich hab noch ein WireFrame wf eingebaut und hab dadurch gesehen, dass die "Sterne" durch den Boden durchgehen, und den Deathtimer abwarten, ohne bei der Collision zurückgesetzt zu werden.

Code: [AUSKLAPPEN]
Graphics3D 800, 600, 16, 2
SetBuffer BackBuffer( )

; --------------------------------------
; Types
; --------------------------------------
Type star
  Field parent%
  Field entity%
  Field countdown#
  Field startcountdown = 120#
  Field deathtime#
  Field x#
  Field y#
  Field z#
End Type

Type cam
  Field pivot%
  Field camera%
  Field x#
  Field y#
  Field z#
End Type

; --------------------------------------
; Kollisionen
; --------------------------------------
Global Type_Camera = 1, Type_Terrain = 2, Type_Scenery = 3, Type_Star = 9

; --------------------------------------
; Terrain
; --------------------------------------
Global terrain = CreateTerrain( 256 )
EntityType terrain, Type_terrain

; --------------------------------------
; MainLoop
; --------------------------------------
camera1 = CreateCam( )
PlaceStars( camera1 )

While Not KeyHit( 1 )
  UpdateCamera( )
  UpdateStars( camera1 )
  UpdateWorld
  RenderWorld
 
  Flip
  Cls
Wend

; --------------------------------------
; Funktionen
; --------------------------------------
Function CreateCam.cam( )
  c.cam = New cam
  c\pivot = CreatePivot( )
  c\camera = CreateCamera( c\pivot )
 
  Return c
End Function

Function UpdateCamera( )
  For c.cam = Each cam
    If KeyDown( 17 ) Then MoveEntity c\pivot, 0, 0, 0.1
    If KeyDown( 31 ) Then MoveEnttiy c\pivot, 0, 0, -0.1
    TurnEntity c\pivot, -MouseXSpeed( ), 0, 0
    TurnEntity c\camera, 0, -MousseYSpeed( ), 0
  Next
End Function

Function PlaceStars.star( c.cam )
  For i = 0 To 499
    s.star = New star
    s\parent = CreatePivot( )
    s\entity = CreateSphere( s\parent )
    EntityType s\star, Type_Star
    PositionEntity s\entity, Rnd( 50, 100 ), Rnd( 50, 100 ), Rnd( 50, 100 )
    startcountdown = startcountdown + 120
  Next
  Return s
End Function

Function UpdateStars.star( c.cam, terrain )
  For s.star = Each star
    PointEntity s\star, c\camera
    If EntityCollided( Type_Star, terrain ) then
      deathtime = 0
    endif
   
    If countdown <= 0 then
      deathtime = deathtime - 0.1
      MoveEntity s\star, 0, 0, 1
    Else
      countdown = countdown - 0.1
    Endif
    If deathtime <= 0 then
      countdown = startcountdown
      deathtime = 120
      PositionEntity s\star, EntityX#( s\parent ), EntityY#( s\parent ), EntityZ#( s\parent )
    Endif
End Function


So, jetzt dürfts der Code sein.

mfG DarkDragon-1993

Edit: Oh, sorry, ich war unter Zeitdruck. ^^
Jetzt dürfts aber stimmen Wink
  • Zuletzt bearbeitet von DarkDragon-1993 am Fr, Dez 05, 2008 15:34, insgesamt einmal bearbeitet

Der_Schläfer

BeitragFr, Nov 28, 2008 23:54
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry aber ich kapiers nicht... die UpdateStars funktion ist nicht komplett da und wie fügt man den alten mit dem neuen code zusammen?

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group