forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Помогте с тачкой! (http://forum.boolean.name/showthread.php?t=5368)

Regfre 19.12.2007 19:00

Помогте с тачкой!
 
Я хочу чтобы машина перемещалась вместе сигроком и непроваливалась под землю.
Help me !Please!!:''(( :''(( :''(( :''((


Код:

Graphics3D 800, 600 ,32,1
SetBuffer BackBuffer()

Const TypePlayer = 1, TypeWall = 2 ,TypeFloor=4,TypeWeapon =5  TYPE_BULLET = 6 TypeAuto =7

Global lWire = False

Global windwave#
Global grasscount

ramp=CreateMesh()
ScaleEntity ramp,10,10,10
surf=CreateSurface( ramp )

segs=1
width#=2

Global g# = 0.3

JM#=terra_y#
JUMP=0
K=1
bmwy# = -15

Global player=CreateSphere()
PositionEntity player,120, 100, 1200
TurnEntity player,0,0,0
EntityRadius player, 5
EntityType player, TypePlayer

Global bull_sprite=LoadSprite( "spark.png" )
ScaleSprite bull_sprite,0.3,0.3
EntityRadius bull_sprite,1.5
EntityType bull_sprite,TYPE_BULLET
HideEntity bull_sprite

Type Bullet
  Field rot#,sprite,time_out
End Type

Collisions TYPE_BULLET,TypeFloor, 1, 1

For k=0 To segs
    x#=Float(k)*width/segs-width/2
    u#=Float(k)/segs
    AddVertex surf,x,1,0,u,0
    AddVertex surf,x,-1,0,u,1
Next
For k=0 To segs-1
    AddTriangle surf,k*2,k*2+2,k*2+3
    AddTriangle surf,k*2,k*2+3,k*2+1
Next
EntityFX ramp, 16 Or 1

grasstex=LoadBrush("grass.png",4)
PaintMesh ramp, grasstex

Dim AirVents(20)
Global iAirVentsCount% = 0

plan = CreatePlane()
tp =LoadTexture("stone.bmp")
EntityTexture plan,tp
ScaleTexture tp, 5,5

camera = CreateCamera(player)

CameraRange camera,0.1,40000
;CameraFogMode Camera,1
;CameraFogColor Camera,255,255,255
;CameraClsColor Camera,255,255,255
;CameraFogRange Camera,10,100000000

light=CreateLight(0)
RotateEntity light,45,0,0

; Load terrain
Global terrain = LoadTerrain( "lmap.bmp" )
Global Y_TERR# = 0.0

; Set terrain detail, enable vertex morphing
TerrainDetail terrain,4000,True

; Scale terrain
ScaleEntity terrain,2,45,2

; Texture terrain
grass_tex=LoadTexture( "ground.bmp" )
EntityTexture terrain,grass_tex,0,1
ScaleTexture grass_tex, 10,10
FreeTexture grass_tex

; Water
Global watermesh=LoadMesh("20x20mesh.3ds") 
RotateMesh watermesh,90,0,0
RotateEntity watermesh,-90,0,0
ScaleEntity watermesh,100,100,10
PositionEntity watermesh, 0,29,0

watertexture=LoadAnimTexture("Wateranim.JPG",256,124,124,0,25)
EntityTexture watermesh,watertexture,0,1
ScaleTexture watertexture,.01,.01
EntityShininess watermesh,0.2
EntityAlpha watermesh, 0.5
EntityFX watermesh, 16

house=LoadMD2( "house.md2" )
house_tex=LoadTexture( "text1.jpg" )
EntityTexture house,house_tex
Y# = TerrainY(terrain, 50,50,160)
PositionEntity house, 350,Y,360
ScaleEntity house, 0.3,0.3,0.3
TurnEntity house, 0,-50,0
FreeTexture house_tex
EntityType house, TypeWall
;EntityRadius house, 20

;Tree
tree = LoadMesh("Tree.b3d")
FlipMesh tree
ScaleEntity tree, .05, .05, .05
PositionEntity tree,0,0,0
TurnEntity tree ,0,0,0
EntityFX tree, 1000
EntityPickMode tree,1
HideEntity tree

sp=CreateSphere(32)
PositionEntity sp,3000,1800,3000
ScaleEntity sp,50,50,50
texm=LoadTexture("moon/moon.JPG")
EntityTexture sp, texm
FreeTexture texm


Global sky=load_skybox("sky\sky")
;PositionEntity sky,x#,y#,z#
ScaleEntity sky,5000,1000,5000
EntityOrder sky,1
EntityFX sky,9

m01 = LoadMesh("01.3ds")
ScaleEntity m01,120,160,40
RotateEntity m01,90,90,0
PositionEntity m01,500,35,1450
EntityType m01, TypeWall
tex2 =LoadTexture("FlatBrick.bmp")
ScaleTexture tex2,0.2,1
EntityTexture m01,tex2
FreeTexture tex2


m03 = LoadMesh("Maps/map3.b3d")
ScaleEntity m03 ,0.15,0.1,0.2
PositionEntity m03 ,500,45,1300
RotateEntity m03,0,90,0
EntityType m03,TypeFloor

m04 = LoadMesh("Maps/shooter.b3d")
ScaleEntity m04,0.1,0.1,0.1
PositionEntity m04 ,540,46,760
EntityType m04,TypeFloor

mp5 = LoadMesh("mp5.b3d",player)
PositionEntity mp5 ,4,-3,4
RotateEntity mp5,0,90,0
ScaleEntity mp5,0.2,0.2,0.2
EntityType mp5,TypeWeapon

bmw = LoadMesh("bmw/bmw.b3d")
PositionEntity bmw ,540,51,1006
ScaleEntity bmw ,0.3,0.3,0.3
EntityType bmw,TypeAuto


Dim grass(1000)
Dim grass_dir#(1000)
grasscount=0
For j#=-1000 To 1000 Step 100
  For i#=-1000 To 1000 Step 100
      grass(grasscount)=CopyEntity(ramp)
      x#=(i+Rnd(150,150))
      z#=(j+Rnd(150,150))
      y#=TerrainY(terrain,x#,y#,z#);
      If Y < 30 Then X= 897897
      PositionEntity grass(grasscount),x,y,z
      grass_dir(grasscount)=Rand(-450,450)
      grasscount=grasscount+1
Next
Next
HideEntity ramp


SeedRnd MilliSecs()
For i=1 To 150
  X# = Rnd(10,600)
  Z# = Rnd(10,600)
  tree1 = CopyEntity( tree )
  Y# = TerrainY(terrain, X,50,Z)
    If Y < 30 Then X= 897897
  PositionEntity tree1, X, Y, Z

Next

AmbientLight 100,100,100

Global waterflow# = 10
Global wavesize# = 0.05

Global surface=GetSurface(watermesh,1)

Global VertexCount=CountVertices(surface)

Type Vertices
        Field x#
        Field y#
        Field z#
End Type

Dim Vertex.Vertices(VertexCount)

For A=0 To VertexCount-1
  Vertex(a) = New Vertices
  Vertex(a)\x#=VertexX#(surface,a)
  Vertex(a)\y#=VertexY#(surface,a)
  Vertex(a)\z#=VertexZ#(surface,a)
Next

Collisions TypePlayer, TypeWall, 2, 2
Collisions TypePlayer, TypeFloor, 2, 3
Collisions TypePlayer, TypeAuto, 2, 3
;Collisions TypePlayer, TypeWeapon, 2, 3

While Not KeyDown( 1 )

; Toggle terrain shading value between 0 and 1 when spacebar is pressed
If KeyHit(57)=True Then terra_shade=1-terra_shade

; Enable/disable terrain shading
TerrainShading terrain,terra_shade

dest_yang# = 100
mxs = MouseXSpeed()/2:mys = MouseYSpeed()/2
dest_xang# = dest_xang# - mxs:dest_yang# = dest_yang# +mys
xm# = CurveValue (xm#, dest_xang#, 3):ym# =  CurveValue (ym#, dest_yang#, 3)


If KeyDown( 32 )=True Then TurnEntity player,0,-5,0
If KeyDown( 30 )=True Then TurnEntity player,0,5,0
If KeyDown( 31 )=True Then MoveEntity player,0,0,-1
If KeyDown( 17 )=True Then MoveEntity player,0,0,2
If KeyHit( 16 )=True  Then lWire = Not lWire
If KeyDown( 57 )=True And k=1 Then JUMP=1
If MouseHit(1)=True  Then  Fire

If KeyHit(56)
  CreateBullet( player )
EndIf

For b.Bullet=Each Bullet
  UpdateBullet( b )
Next



If EntityCollided (player,TypeAuto)
  bmw2 = LoadMesh("bmw/bmw.b3d",player)
PositionEntity bmw2 ,0,-15,10
ScaleEntity bmw2 ,0.3,0.3,0.3
RotateEntity bmw2 ,0,180,0
;If EntityY(bmw2)<TerrainY(terrain,x#,y#,z#) Then EntityY(bmw2)=TerrainY(terrain,x#,y#,z#)

bmwyyy# = TerrainY(terrain,x#,y#,z#)
bmwyy#=TerrainY(terrain,x#,y#,z#)+15
ply#=bmwyy#+15
g#=0
PositionEntity player,EntityX(player),200,EntityZ(player)
PositionEntity bmw2,0,bmwyy#,10
  FreeEntity bmw

EndIf

  TurnEntity sp,0,-0.001,0

wind(1)



If  EntityCollided (player,TypeWall) Then g#=0 Else g#=0.3


;wIf  EntityCollided (player,TypeWeapon)  Then PositionEntity mp5,EntityX(player)+3,JM#+8,EntityZ(player)

If jump=1 Then jm#=jm#+g#:k=0
If jm#>max_y# Then jump=0:k=2
If k=2 Then jm#=jm#-g#
If jm#<terra_y# Then jm#=terra_y#:k=1
If jump=0
  If jm#>terra_y# Then jm#=jm#-g#
End If

WireFrame lWire
x#=EntityX(player)
y#=EntityY(player)
z#=EntityZ(player)


terra_y#=TerrainY(terrain,x#,y#,z#)
max_y# = terra_y#+8

;RotateEntity player,ym#,xm#,zc#
PositionEntity player,EntityX(player),JM#+8,EntityZ(player)

wd=wd+1
If wd=4
  EntityTexture watermesh,watertexture,frame,1
  frame=frame+1
  If frame=22 Then frame=0
  wd=0
EndIf

UpdateWater()

If terra_y < 14.5
  CameraFogRange Camera,10,70
  AmbientLight 0,250,250
Else
  CameraFogRange Camera,10,1000
  AmbientLight 100,100,100
EndIf


RenderWorld
UpdateWorld
Text 0,0,"Use cursor keys to move about the terrain"
Text 400,300 ,"*"

Flip

Wend

End

;---------------------
Function UpdateWater()
For a=0 To VertexCount-1
Freq#=MilliSecs()/waterflow
  Vertex(a)\z#=Sin(freq+Vertex(a)\x#*300+Vertex(a)\y#*400)*wavesize
  VertexCoords surface,a,Vertex(a)\x#,Vertex(a)\y#,Vertex(a)\z#
Next

UpdateNormals watermesh

End Function


;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function Load_SkyBox( file$ )
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

        m=CreateMesh()

        ;front face

        b=LoadBrush(file +"_Le.png",49 )::
        If Not B b=LoadBrush( file +"_Le.png",49 )::
        s=CreateSurface( m,b )
        AddVertex s,-1,+2,-1,0,0:AddVertex s,+1,+2,-1,1,0
        AddVertex s,+1,-0,-1,1,1:AddVertex s,-1,-0,-1,0,1
        AddTriangle s,0,1,2:AddTriangle s,0,2,3
        FreeBrush b
       
        ;right face
        b=LoadBrush( file +"_fr.png",49 )::
        If Not B b=LoadBrush(file +"_fr.png",49 )::
        s=CreateSurface( m,b )
        AddVertex s,+1,+2,-1,0,0:AddVertex s,+1,+2,+1,1,0
        AddVertex s,+1,-0,+1,1,1:AddVertex s,+1,-0,-1,0,1
        AddTriangle s,0,1,2:AddTriangle s,0,2,3
        FreeBrush b
       
        ;back face
        b=LoadBrush(file +"_ri.png",49 )::
        If Not B b=LoadBrush(file +"_ri.png",49 )::
        s=CreateSurface( m,b )
        AddVertex s,+1,+2,+1,0,0:AddVertex s,-1,+2,+1,1,0
        AddVertex s,-1,-0,+1,1,1:AddVertex s,+1,-0,+1,0,1
        AddTriangle s,0,1,2:AddTriangle s,0,2,3
        FreeBrush b
        ;left face
        b=LoadBrush(file +"_bk.png",49 )::
        If Not B b=LoadBrush(file +"_bk.png",49 )::
        s=CreateSurface( m,b )
        AddVertex s,-1,+2,+1,0,0:AddVertex s,-1,+2,-1,1,0
        AddVertex s,-1,-0,-1,1,1:AddVertex s,-1,-0,+1,0,1
        AddTriangle s,0,1,2:AddTriangle s,0,2,3
        FreeBrush b
        ;top face
        b=LoadBrush(file +"_UP.png",49 )::
        If Not B b=LoadBrush(file +"_UP.png",49 )::
        s=CreateSurface( m,b )
        AddVertex s,-1,+2,+1,0,1:AddVertex s,+1,+2,+1,0,0
        AddVertex s,+1,+2,-1,1,0:AddVertex s,-1,+2,-1,1,1
        AddTriangle s,0,1,2:AddTriangle s,0,2,3
        FreeBrush b
        FlipMesh m
        EntityFX m,9
        EntityOrder m,1
        RotateEntity m,0,90,0
        Return m
End Function





Function Fire()
;Animate mp5,1,0.2,1,9
  shot = LoadSound("SHOOT1.WAV")
  PlaySound shot
  LoopSound shot
  CreateBullet( player )
For b.Bullet=Each Bullet
  UpdateBullet( b )
Next
End Function


;*******Mouse Function************
Function CurveValue#(current#,destination#,curve)
current#=current#+((destination#-current#)/curve)
Return current#
End Function
;********************************


;--------------------
Function wind(speed#)
  For i=0 To grasscount-1
      x#=EntityX(grass(i))
      z#=EntityZ(grass(i))
      RotateEntity grass(i),0,grass_dir(i),Cos(windwave+z)*0.5
  Next
  windwave=(windwave+speed#)
End Function

Function CreateBullet.Bullet( player )
  b.Bullet=New Bullet
  b\time_out=150
  b\sprite=CopyEntity( bull_sprite,player )
EntityParent b\sprite,0
Return b
End Function

Function UpdateBullet( b.Bullet )
b\time_out=b\time_out-1
If (b\time_out=0) Or EntityCollided( b\sprite,TypeWall )
  FreeEntity b\sprite
  Delete b
  Return
EndIf
b\rot=b\rot+30
RotateSprite b\sprite,b\rot
MoveEntity b\sprite,0,0,3
End Function

Function Go()
bmw2 = LoadMesh("bmw/bmw.b3d",player)
PositionEntity bmw2 ,0,-15,10
ScaleEntity bmw2 ,0.3,0.3,0.3
RotateEntity bmw2 ,0,180,0
;If EntityY(bmw2)<TerrainY(terrain,x#,y#,z#) Then EntityY(bmw2)=TerrainY(terrain,x#,y#,z#)

bmwyyy# = TerrainY(terrain,x#,y#,z#)
bmwyy#=TerrainY(terrain,x#,y#,z#)-15
ply#=bmwyy#+15
g#=0
PositionEntity player,EntityX(player),200,EntityZ(player)
PositionEntity bmw2,0,bmwyy#,10


End Function


IGR 19.12.2007 19:14

Re: Помогте с тачкой!
 
что бы "вместе" - юзай parententity car,player или parententity player, car
ну это смотря что к чему прикрепляеш !!
для того что бы "непроваливалась" - юзай collision !!
в это Мегакод и загленуть страшно !! :(
Укажи пожалуйста те строчки где ошибка !!
если вообще ошибки нет, то скажи что "я вот скопипастил чей-то код и незнаю как он работает" !! и что бы разобратся, в твоем случае, нужно учит все с начало !! ;)

Regfre 19.12.2007 19:52

Re: Помогте с тачкой!
 
Код я сделал сам!
Я прикрепляю машину к игроку.
А вот с Коллизиеми самая проблема.Что бы игрок ходил по террайну сделал чтобы Yигрока=Yтеррайна+G ;G-при прыжке.
Из за этого(Наверное) колизия с игроком неработает в Y.И со всеми объектами к нему привязанными.Видел гдето такой способ решил также сделать.

Пробавал через ФУНКЦИЮ,но тогда нельзя игрока поднять.
А переделывать всё сначала нехочется.

Trilliput 19.12.2007 20:24

Re: Помогте с тачкой!
 
товарищ ты бы хоть с медиа выкладывал, кто знает что ты там задумывал.

ABTOMAT 20.12.2007 00:38

Re: Помогте с тачкой!
 
Const type_car = 1
Const Type_Level = 2

EntityType <>, Type_Car
EntityType <>, Type_Level

Collisions 1,2,2,2


Чтобы игрок двигался вместе с машиной, на время, когда он в машине, привязывай его к ней (EntityParent)

Выложи в архиве с медиа, иначе в этом коде углядеть что-то трудно.

По непонятным ф-ям смотри в хелп Блитза.

Цитата:

Я хочу чтобы машина перемещалась вместе сигроком и непроваливалась под землю.
Я хочу, чтобы машина перемещалась вместе с_игроком и не_проваливалась под землю.

И подучи немного Великий Могучий Русский Язык - язык интернационального общения!

Regfre 20.12.2007 15:09

Re: Помогте с тачкой!
 
Спасибо, вроде получилось.


Часовой пояс GMT +4, время: 19:53.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot