|
3D-программирование Вопросы, касающиеся программирования 3D мира |
19.12.2007, 19:00
|
#1
|
AnyKey`щик
Регистрация: 15.12.2007
Сообщений: 12
Написано 0 полезных сообщений (для 0 пользователей)
|
Помогте с тачкой!
Я хочу чтобы машина перемещалась вместе сигроком и непроваливалась под землю.
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
|
(Offline)
|
|
19.12.2007, 19:14
|
#2
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Re: Помогте с тачкой!
что бы "вместе" - юзай parententity car,player или parententity player, car
ну это смотря что к чему прикрепляеш !!
для того что бы "непроваливалась" - юзай collision !!
в это Мегакод и загленуть страшно !!
Укажи пожалуйста те строчки где ошибка !!
если вообще ошибки нет, то скажи что "я вот скопипастил чей-то код и незнаю как он работает" !! и что бы разобратся, в твоем случае, нужно учит все с начало !!
|
(Offline)
|
|
19.12.2007, 19:52
|
#3
|
AnyKey`щик
Регистрация: 15.12.2007
Сообщений: 12
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Помогте с тачкой!
Код я сделал сам!
Я прикрепляю машину к игроку.
А вот с Коллизиеми самая проблема.Что бы игрок ходил по террайну сделал чтобы Yигрока=Yтеррайна+G ;G-при прыжке.
Из за этого(Наверное) колизия с игроком неработает в Y.И со всеми объектами к нему привязанными.Видел гдето такой способ решил также сделать.
Пробавал через ФУНКЦИЮ,но тогда нельзя игрока поднять.
А переделывать всё сначала нехочется.
|
(Offline)
|
|
19.12.2007, 20:24
|
#4
|
Знающий
Регистрация: 27.07.2006
Сообщений: 250
Написано 6 полезных сообщений (для 7 пользователей)
|
Re: Помогте с тачкой!
товарищ ты бы хоть с медиа выкладывал, кто знает что ты там задумывал.
|
(Offline)
|
|
20.12.2007, 00:38
|
#5
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Re: Помогте с тачкой!
Const type_car = 1
Const Type_Level = 2
EntityType <>, Type_Car
EntityType <>, Type_Level
Collisions 1,2,2,2
Чтобы игрок двигался вместе с машиной, на время, когда он в машине, привязывай его к ней (EntityParent)
Выложи в архиве с медиа, иначе в этом коде углядеть что-то трудно.
По непонятным ф-ям смотри в хелп Блитза.
Я хочу чтобы машина перемещалась вместе сигроком и непроваливалась под землю.
|
Я хочу , чтобы машина перемещалась вместе с _игроком и не _проваливалась под землю.
И подучи немного Великий Могучий Русский Язык - язык интернационального общения!
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
20.12.2007, 15:09
|
#6
|
AnyKey`щик
Регистрация: 15.12.2007
Сообщений: 12
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Помогте с тачкой!
Спасибо, вроде получилось.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:07.
|