Kamera sollte Spieler folgen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

timo_81

Betreff: Kamera sollte Spieler folgen

BeitragSo, Aug 28, 2005 13:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi ,

ich wollte das man meine Spielfigur von hinten jedoch leicht erhöht sieht.
Doch die Spielfigur geht immer aus dem Spielfeld und klebt nicht an der Camera ich hatte folgende Idee:


If KeyDown(200)=1 Then MoveEntity cam,0,0,0.25
if KeyDown(200)=1 then MoveEntity spieler,0,0,1.25

da der Spieler sich immer um 1.00 mehr bewegt müsster er doch immer
der Kamera voraus sein und deise ihm folgen.

Das klappt aber alles nicht.

gruß
Timo
 

Lion

BeitragSo, Aug 28, 2005 13:59
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm war das nicht mal was mit...entity parent / child?
schau ma inner OH danach...

mfg
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb
AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x

Bura.Tino

BeitragSo, Aug 28, 2005 14:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn Du das so machst, wie Du beschrieben hast, dann ist Dein Spieler schneller als die Kamera und läuft Dir auch weg. Denn wenn Du losläufst, vergrößert sich der Abstand zur Kamera jedesmal. Die Kamera kommt also nicht hinterher.

Besser ist hier folgendes:

BlitzBasic: [AUSKLAPPEN]
Spieler=Load(Anim)Mesh(\"Spieler.b3d\")
Kamera=Createcam(Spieler)
MoveEntity Kamera,0,5,-10 ;Mit den Werten musst Du dann rumspielen



oder

BlitzBasic: [AUSKLAPPEN]
Spieler=Load(Anim)Mesh(\"Spieler.b3d\")
Kamera=Createcam()
EntityParent Kamera, Spieler
MoveEntity Kamera,0,5,-10 ;Mit den Werten musst Du dann rumspielen


Wobei oberer natürlich besser ist.

darth

Betreff: denkfehler...

BeitragSo, Aug 28, 2005 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
hi
das ist ein denkfehler...
wenn der spieler sich schneller bewegt als die kamera, dann läuft er der ja davon (wie bura.tino schon sage...)
wenn du es so machen willst, dann würd ich den spieler einfach n bisschen vor der camera platzieren
positionentity camera,0,2,0 ;cam ist auf der höhe 2
positionentity player,0,0,5 ;spieler ist 5 vor kamera

if keydown(200) then
moveentity camera,0,0,1
moveentity player,0,0,1
endif

=> oder du machst es mit entityparent (wie lion vorgeschlagen hat...)
cam=createcamera()
...
player=machplayer()
...
entityparent cam,player

if keydown(200) then moveentity player,0,0,1 ;cam wird automatisch mitbewegt...
Diese Signatur ist leer.
 

timo_81

BeitragSo, Aug 28, 2005 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Irgendwie scheint die Figur dann unter dem Terrain zu liegen .
Man sieht sie weit unten aber nur im Wireframe -modus.

Hier mal der gesamte Code (Hab ein paar Tutorials miteingearbeitet da ich erst mit Blitz3D angefangen hab)
BlitzBasic: [AUSKLAPPEN]

;------------------------------
;3D Welt 0.11
;------------------------------
;
;August 2005
;
; Fertig:
;------------------------------
;+ Nebel
;+ komplett 3D
;+ freie Kamerabewegung
;+ Multitexturing
;+ Wasser & Himmel
;------------------------------

;To-Do-Liste:
;-------------------------------
;- Dynamisches Wasser und Himmel
;
;- Spielfigur folgen etc.
;-------------------------------





Graphics3D 1024,768,16,1

SetBuffer BackBuffer()

Global fntArial,fntArialB,fntArialB_2

fntArial=LoadFont(\"Arial\",16,False,False,False)
fntArialB=LoadFont(\"Arial\",28,True,False,False)
fntArialB_2=LoadFont(\"Arial\",16,True,False,False)


;Heightmap , Texturzuweisung -> Multitexturing

terrain=LoadTerrain(\"heightmap.bmp\")

textur_gras=LoadTexture (\"wiese.jpg\")

textur_2=LoadTexture (\"stein.jpg\")

;Zuweisung der zwei Texturen an das Terrain

EntityTexture terrain,textur_gras,0,0

EntityTexture terrain,textur_2,0,1

; Größe anpassen des Terrains und der Texturen

ScaleEntity terrain,50,290,50

ScaleTexture textur_gras,50,50

ScaleTexture textur_2,3,3



; 'Wasserplane'

wasser=CreatePlane()

wasser_textur=LoadTexture (\"wasser.bmp\",4)

EntityTexture wasser,wasser_textur

ScaleTexture wasser_textur,100,100

MoveEntity wasser,0,10,0




EntityAlpha wasser,0.6



;himmelplane

plane=CreatePlane()

himmel=LoadTexture( \"sky.bmp\",12 )

EntityTexture plane,himmel

ScaleTexture himmel,1000,1000

EntityFX plane,1

PositionEntity plane,0,850,0

plane=CopyEntity( plane )

RotateEntity plane,0,0,180
k=800
j=k


;Erstelle Camera
Spieler=LoadMesh(\"mario.x\")
cam=CreateCamera(Spieler)
EntityParent cam , Spieler




;Camerabewegung
MoveEntity cam,800,100,100

CameraFogMode cam,1

CameraRange cam,1,10000 ;Sichtweite der Cam

CameraFogRange cam,100,4000 ; Radius des Nebels

CameraFogColor cam,40,140,255 ; Farbe des Nebels

CameraClsColor cam,40,140,255

light=CreateLight()

TurnEntity light,45,45,0

MoveMouse EntityX(cam),EntityY(cam)
;OBJEKTE
;========================================================
;Monster erstellen

;FireAngel kommen immer nur in Dreiergruppen
;---------------------------------------------
Dim fire_angel(3)
For i=1 To 3

j=j+2
fire_angel(i)= LoadMesh(\"3.3ds\")

PositionEntity fire_angel(i) ,j,249,102
ScaleEntity fire_angel(i),1.0,1.0,1.0

fire1=LoadTexture(\"skin.jpg\")
fire2=LoadTexture(\"burg1.jpg\")
EntityTexture fire_angel(i),fire1,0,0
;EntityTexture fire_angel(i),fire2,0,1
EntityPickMode fire_angel(i),2

Next
;--------------------------------------------

castle=LoadMesh(\"castle1.x\")
PositionEntity castle,800,EntityY(cam) ,820
ScaleEntity castle ,1.0,1.0,1.0
EntityTexture castle,fire2
EntityPickMode castle ,2
;===========================================



;Rotieren der Camera mit der Maus
While Not KeyHit(1)

mx=MouseX()
my=MouseY()
entity=CameraPick(cam,mx,my)





RotateEntity cam,EntityPitch(cam)+MouseYSpeed(),EntityYaw(cam)-MouseXSpeed(),0
If KeyDown(203)=1 Then x#=x#-5.0
If KeyDown(205)=1 Then x#=x#+5.0
If KeyDown(208)=1 Then y#=y#-5.0
If KeyDown(200)=1 Then y#=y#+5.0
If KeyDown(44)=1 Then z#=z#-5.0
If KeyDown(30)=1 Then z#=z#+5.0
If KeyDown(205)=1 Then TurnEntity cam,0,-1,0 ;Kamera rechts durch pfeiltaste
If KeyDown(203)=1 Then TurnEntity cam,0,1,0 ;Kamera links durch Pfeiltaste
If KeyDown(208)=1 Then MoveEntity cam,0,0,-0.25







x#=EntityX(cam)
y#=EntityY(cam)
z#=EntityZ(cam)


terra_y#=TerrainY(terrain,x#,y#,z#)+5
PositionEntity cam,x#,terra_y#,z#

If KeyDown(200)=1 Then MoveEntity cam,0,0,0.25






If KeyDown(33)=1 Then MoveEntity cam,0,0,2 ;rennen mit f
If KeyDown(49)=1 Then TurnEntity light ,0,0,0
If KeyDown(38)=1 Then TurnEntity light,45,45,0
If KeyDown(17)=1 Then WireFrame 1 ;Taste w
If KeyDown(31)=1 Then WireFrame 0 ; Taste s
If KeyDown( 60 )=True Then zoom#=zoom#-0.1
If KeyDown( 59 )=True Then zoom#=zoom#+0.1


If zoom#<1 Then zoom#=1
If zoom#>100 Then zoom#=100

; Set camera zoom
CameraZoom cam,zoom#




RenderWorld
Color (139),(90),(43)
Rect 0,600,1024,168,1



Color (0),(0),(0)
Rect 380,630,40,40,0
Rect 430,630,40,40,0
Rect 480,630,40,40,0
Rect 530,630,40,40,0
Rect 580,630,40,40,0

SetFont fntArialB
Text 380,600,\"Paladin\" + \" Level 1 \" ,False,False
Rect 840,610,40,40,0
Line 860,650,860,660
Line 820,680,840,680
Line 880,680,900,680
Rect 780,660,40,40,0
Rect 900,660,40,40,0
Rect 840,660,40,40,0
Line 860,700,820,720
Line 860,700,900,720
Rect 800,720,40,40,0
Rect 880,720,40,40,0




SetFont fntArialB_2
Text 390,680,\"F1\",False,False
Text 440,680,\"F2\",False,False
Text 490,680,\"F3\",False,False
Text 540,680,\"F4\",False,False
Text 590,680,\"F5\",False,False


Text 10,620,\"Energie: 100\",False,False
Text 10,640,\"Mana: 0\", False,False
Text 10,660,\"Kraft: 1\",False,False
Text 10,680,\"Geschwindigkeit: 5\" , False , False
Text 10,700,\"Geschick: 10 \",False,False
Text 10,720,\"Verteidigung: 1-2\"
Text 10,740,\"Schaden: 1-2 \"



Text 200,740,\"Inventar: ->\",False,False
Rect 300,720,40,40,0
Rect 350,720,40,40,0
Rect 400,720,40,40,0
Rect 450,720,40,40,0
Rect 500,720,40,40,0
Rect 550,720,40,40,0
Rect 600,720,40,40,0
Rect 650,720,40,40,0
Rect 700,720,40,40,0





;If Entity=0 Then Text 0,480,\"Nicht ausgewählt\"
; If Entity<>0 Then Text 0,480,\"Ausgewählt:\"+entity
Oval mx,my,15,15,1

Flip

Wend

ClearWorld
 

timo_81

BeitragSo, Aug 28, 2005 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habs jetzt nach dem ersten Prinzip von Darth Gamer versucht aber nun
fliegt das mesh irgendwann wenn mal länger läuft in den Boden rein.
Bzw. man sieht auch , dass das Mesh gar keine Bodenhaftung hat und
irgendwie rumfliegt.

Fazit: Es bewegt sich nicht auf dem Terrain sondern wenn eine Erhöhung
kommt geht es ihn das Terrain rein , oder wenn eine niedere Stelle kommt
schwebt es darüber.

An was könnte es liegen?

Gruß
Timo

Bura.Tino

BeitragSo, Aug 28, 2005 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst die Hoehe des Terrains (an der Stelle wo deine Figur ist) abfragen und die Figur dementsprechend ausrichten.

http://www.blitzbase.de/befehl...height.htm

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group