Показать сообщение отдельно
Старый 30.10.2007, 11:31   #20
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Re: Прибить гвоздями, либо приварить?

Ну так как проблемы с коллизией я только у корабля пока заметил, постарался сделать пример касающийся только его, и его коллизии без лишних функций управления и тд.
Вопщем вставляйте код в свой блитц, и используйте свою медию, пофигу какие текстуры, а вместо корабля пусть хоть тролейбус будет.
Заметите, что корабль в земле застревает, когда должен скользить.

Примечание:
Q - загрузить небо, землю, камеру, функцию управления корабля
(больше 1 раза не нажимайте! ато создадите клоны - земли, корабля, камеры и выключите управление)

управление кораблём:
W A S D UP DOWN LEFT RIGHT - 8 клавиш, так надо, как запустите осваивайтесь в управлении сразу всеми восмью.
Тут и мышкой можно, но не нужно )

Graphics3D 1024, 768, 32
SetBuffer BackBuffer()
HidePointer

Global mXSp#
Global mYSp#

Global speedk1#=0
Global k1
Global k1u#=0
Global Planet1Plane
Global Planet1Nebo

Global Red=100
Global Green=100
Global Blue=100

Const TypeTehnika=1,TypeEarth=2,TypeNebo=3

Function k1()
k1 = LoadMesh("Data\object\ships\k1\k1.b3d")
ScaleEntity k1,0.1,0.1,0.1
PositionEntity k1,5,4,30
RotateEntity k1, 0, 90, 0
EntityRadius k1,3
EntityType k1,TypeTehnika
End Function

Function Camerak1()
Camerak1 = CreateCamera(k1)
PositionEntity Camerak1,3,60,-320
RotateEntity Camerak1, 0, 0, 0
CameraRange Camerak1,1.0,1000000
CameraClsColor Camerak1,red,green,Blue
End Function

Function k1u()

UpDown#=0.3
Zkrenk1#=1
XYkrenk1#=1
TSpeed#=0.020

mXSp=MouseXSpeed()
mYSp=MouseYSpeed()

    TurnEntity k1,mYSp*TSpeed,0,0
    TurnEntity k1,0,-mXSp*TSpeed,0

    MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

    MoveEntity k1,0,0,+speedk1#

If KeyDown(30) Then TurnEntity k1,0,0,+Zkrenk1#

If KeyDown(32) Then TurnEntity k1,0,0,-Zkrenk1#

If KeyDown(200) Then TurnEntity k1,+XYkrenk1#,0,0

If KeyDown(208) Then TurnEntity k1,-XYkrenk1#,0,0

If KeyDown(203) Then TurnEntity k1,0,+XYkrenk1#,0

If KeyDown(205) Then TurnEntity k1,0,-XYkrenk1#,0

If KeyDown(42) Then
MoveEntity k1,0,+UpDown#,0
End If

If KeyDown(29) Then
MoveEntity k1,0,-UpDown#,0
End If

If KeyHit(17) Then 

speedk1#=speedk1#+0.5

End If

If KeyHit(31) Then 

speedk1#=speedk1#-0.5

End If

If speedk1#=2 Then

speedk1#=1.5

EndIf

If speedk1#=-0.5 Then

speedk1#=0

EndIf


End Function


Function Planet1World()
Planet1Plane = CreatePlane()
EntityType Planet1Plane,TypeEarth
EntityAlpha Planet1Plane,0.999
Planet1WoterTexture=LoadTexture("Data\textures\pesok.jpg") 
ScaleTexture Planet1WoterTexture,15,15
EntityTexture Planet1Plane,Planet1WoterTexture

Planet1Nebo = CreatePlane()
PositionEntity Planet1Nebo,0,3000,0
RotateEntity Planet1Nebo, 0, 0, 180
EntityAlpha Planet1Nebo,0.7
EntityType Planet1Nebo,TypeNebo
Planet1NeboTexture=LoadTexture("Data\textures\Planet1-Nebo.jpg") 
ScaleTexture Planet1NeboTexture,3000,3000
EntityTexture Planet1Nebo,Planet1NeboTexture
End Function


While Not KeyDown(1)

If KeyHit(16) Then
Planet1World()
k1()
Camerak1()
k1u#=1
End If

If k1u#=1 Then 
k1u()
End If

UpdateWorld

RenderWorld

Collisions TypeTehnika,TypeEarth,2,3
Collisions TypeTehnika,TypeNebo,2,3

Flip

Wend

End
P.S. Заметил, что застревает при полёте в определённую сторону,
т.е. если смотреть по воображаемому компосу:
при полёте на север застревает, при полёте на юг не застревает.

Добавил:
если у неба коллизию убрать, тоесть стереть строчку
Collisions TypeTehnika,TypeNebo,2,3
то баг с застряванием в земле пропадает.
(Offline)
 
Ответить с цитированием