Walter | Дата: Пятница, 18 Декабря 2009, 10:18 | Сообщение # 4 |
![Walter](http://s5.ucoz.net/a/05/0885.jpg) Начинающий
Группа: Участники
Сообщений: 9
Награды: 0
Замечания: 20%
Статус: ![](/on.gif)
| Вот сама, так сказать, игра.... На всякий случай.... Code ;start time 12.12.09. AppTitle "World" Graphics3D 640, 480, 0, 2 SetBuffer BackBuffer()
CreateLight()
;create 3 copies of the same building level1 = Building() level2 = Building() level3 = Building()
;!! ;instead of using RemoveTris, create three separate meshes ;one with all floors ;one with all the walls ;one with all the ceilings ;RemoveTris doesn't remove redundant vertices, so it is unoptimised ;!! Const palke_col=5,share_col=6,cube_col=7
RemoveTris(level1, False, False) ;floor RemoveTris(level2, True, False) ;wall RemoveTris(level3, False, True) ;ceiling EntityType level1, 2 ;floor EntityType level2, 3 ;wall EntityType level3, 4 ;ceiling ;EntityType cube, 5 EntityPickMode level1, 2 ;floor
Const sz = 10 ;player height
;create player me = CreatePivot() EntityType me, 1 EntityRadius me, 5, sz
;create camera cam = CreateCamera() EntityParent cam, me PositionEntity cam, 0, 0, 0
;place player PositionEntity me,0,50,200 ResetEntity me
Collisions 1, 2, 2, 3 ;floor Collisions 1, 3, 2, 3 ;walls Collisions 1, 4, 2, 3 ;ceiling
;objects cube = CreateCube() ScaleEntity cube,10,20,10 PositionEntity cube,40,-60,20 EntityColor cube,255,100,255 EntityType cube,cube_col share = CreateSphere() ScaleEntity share,20,20,20 PositionEntity share,40,-20,20 EntityColor share,0,255,255 EntityType share,share_col palke = CreateCylinder() ScaleEntity palke,10,30,10 PositionEntity palke,50,-70,50 EntityColor palke,255,255,0 TurnEntity palke,90,0,90 EntityType palke,palke_col Collisions 1,5,2,3 Collisions 1,6,2,3 Collisions 1,7,2,3
Local jsp# ;jump speed Local xsp#, ysp# ;x/y speed
;reset mouse cursor MoveMouse 400, 300 MouseXSpeed() MouseYSpeed()
Repeat
;space = jumpkey jkey = KeyHit(57)
;lookaround with mouse oldx# = EntityX(me) oldy# = EntityY(me) oldz# = EntityZ(me) MoveEntity me, xsp*2, 0, ysp*2 If EntityCollided(me, 3) Then PositionEntity me, oldx, oldy, oldz ;bump into wall TurnEntity me, 0, -MouseXSpeed(), 0 look# = look + MouseYSpeed() MoveMouse 400, 300 If look < -80 Then look = -80 If look > 80 Then look = 80 RotateEntity cam, look, 0, 0
;whobble x# = EntityX(me) z# = EntityZ(me) hh# = Sin((x + z) * 8) * 0.1 PositionEntity cam, 0, hh#, 0
;jumping? If jump > 0 Then
xsp = xsp * 0.98 ;low friction ysp = ysp * 0.98
TranslateEntity me, 0, jsp, 0 ;move up jsp = jsp * .9 ;jump friction If (EntityCollided(me, 2)) Then jump = 0 ;bump into floor If (EntityCollided(me, 4)) Then jump = 0 ;bump into ceiling jump = jump - 4 ;not jumping? Else
xsp = xsp * 0.9 ;high friction ysp = ysp * 0.9 ;jump key If jkey Then x# = EntityX(me) y# = EntityY(me) z# = EntityZ(me) ;only allow when on floor If LinePick(x,y,z,0,-(sz+1),0) Then jump=45:jsp=3 Else ;fall down TranslateEntity me, 0, -gv#, 0 If Not(EntityCollided(me, 2)) Then ;if not on floor gv = gv * 1.08 + 0.4 ;increase gravity Else gv = 0 ;reset gravity ;cursor keys (WASD) If KeyDown(30) Then xsp = xsp * 1.01 - 0.1 If KeyDown(32) Then xsp = xsp * 1.01 + 0.1 If KeyDown(31) Then ysp = ysp * 1.01 - 0.1 If KeyDown(17) Then ysp = ysp * 1.01 + 0.1 End If End If End If UpdateWorld RenderWorld
Flip Until KeyHit(1)
End
;remove certain tris Type TTriangle Field v0, v1, v2 End Type Function RemoveTris(mesh, invert, cei)
lt = 0 If EntityClass(mesh) = "Mesh" Then For i = 1 To CountSurfaces(mesh) s = GetSurface(mesh, i) For t = 0 To CountTriangles(s) - 1 v0 = TriangleVertex( s, t, 0 ) v1 = TriangleVertex( s, t, 1 ) v2 = TriangleVertex( s, t, 2 ) ax# = VertexX( s, v1 ) - VertexX( s, v0 ) ay# = VertexY( s, v1 ) - VertexY( s, v0 ) az# = VertexZ( s, v1 ) - VertexZ( s, v0 ) bx# = VertexX( s, v2 ) - VertexX( s, v1 ) by# = VertexY( s, v2 ) - VertexY( s, v1 ) bz# = VertexZ( s, v2 ) - VertexZ( s, v1 ) Nx# = ( ay * bz ) - ( az * by ) Ny# = ( az * bx ) - ( ax * bz ) Nz# = ( ax * by ) - ( ay * bx ) If cei Then test2 = (ny < 0) Else test2 = (ny > 0) test = (Abs(ny) > Abs(nx)) And (Abs(ny) > Abs(nz)) And test2 If invert Then test = Not(test) If test Then tt.TTriangle = New TTriangle tt\v0 = v0 tt\v1 = v1 tt\v2 = v2 End If Next ClearSurface s, False, True ti = 0 For tt.TTriangle = Each TTriangle AddTriangle s, tt\v0, tt\v1, tt\v2 ti=ti+1 Next Delete Each TTriangle Next End If For i = 1 To CountChildren(mesh) RemoveTris(GetChild(mesh, i), invert, cei) Next UpdateNormals mesh End Function
;create building Function Building()
tex = CreateTexture(16, 16, 1+8) Rect 0, 0, 16, 16, False
CopyRect 0, 0, 16, 16, 0, 0, BackBuffer(), TextureBuffer(tex) mesh = CreateCube() ScaleMesh mesh, 300, 80, 300 FlipMesh mesh EntityTexture mesh, tex ScaleTexture tex, 0.01, 0.03 Return mesh End Function
|
|
| |
Walter | Дата: Суббота, 19 Декабря 2009, 05:31 | Сообщение # 8 |
![Walter](http://s5.ucoz.net/a/05/0885.jpg) Начинающий
Группа: Участники
Сообщений: 9
Награды: 0
Замечания: 20%
Статус: ![](/on.gif)
| Quote если ashadows сложен, попробуй использовать другие либы и способы. Например, Devil ShadowSystem, хорошая система теней для простых сцен, рабтает на либы, быстро и просто, всего пара функций для подключения к проекту и работает. phil А можешь ссылочку дать, а то я что-то не могу найти. И мануальчик какой-нить. Да, и еще, а несколько источников света? Ну типа улица с фонарями она может сделать?
|
|
| |
gforcer | Дата: Суббота, 19 Декабря 2009, 13:13 | Сообщение # 11 |
![gforcer](http://igrostroenie.org/avatar/38/251036.png) Начинающий
Группа: Участники
Сообщений: 156
Награды: 0
Замечания: 0%
Статус: ![](/on.gif)
Профессия: Программист
Команда: несколько
Проектов: РТС, Рейсинг, ФПС
| Walter, ты программист или нуб ?! Мы тебе здесь кучу либ перечислили, пробей по гуглу, например devil shadow system скачать итд итп. Пользуйся поиском, или лучше поиском по форуму, так как здесь куча ответов на горы вопросов, среди них и твой есть, просто поищи
|
|
| |