|
3D-программирование Вопросы, касающиеся программирования 3D мира |
28.05.2007, 02:44
|
#31
|
Модератор
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений (для 44 пользователей)
|
Re: Как узнать размер меша?
....
Pick%= CameraPick(Cam,MouseX(),MouseY())
....
For Unit.TUnit = Each TUnit
If Unit<>Null
; EntityPickMode Unit\Model,2
AnimEntityPickMode(Unit\Model,2)
If Pick%= Unit\Model
Unit\Selected=True
Else
Unit\Selected=False
EndIf
EndIf
Next
....
Function AnimEntityPickMode(Mesh, Mode)
EntityPickMode(Mesh, Mode)
For i = 1 To (CountChildren(Mesh))
Child = GetChild(Mesh, i)
AnimEntityPickMode(Child, Mode)
Next
End Function
|
(Offline)
|
|
28.05.2007, 02:50
|
#32
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Как узнать размер меша?
1. необязательно каждый цинкл проводить изминение пикабелити этих объектов. достаточно ето сделать один раз, во время их создания.
ПС. а можно весь код в студию?
|
(Offline)
|
|
28.05.2007, 02:51
|
#33
|
Модератор
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений (для 44 пользователей)
|
Там очень много что канкретно нужно?
С простыми (не анемироваными) мешами все ок, а с анемироваными не получается
|
(Offline)
|
|
28.05.2007, 02:56
|
#34
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Как узнать размер меша?
1. как показывается выделение юнитов
2. ВЕСЬ код от Pick%= CameraPick(Cam,MouseX(),MouseY()) до If Pick%= Unit\Model.
3. вынеси плиз AnimEntityPickMode(Unit\Model,2), туда, где создаются юниты.
|
(Offline)
|
|
28.05.2007, 03:03
|
#35
|
Модератор
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений (для 44 пользователей)
|
Re: Как узнать размер меша?
Pick%= CameraPick(Cam,MouseX(),MouseY())
If MouseHit(1)
If CursorStatus=0 Then SelectBuilding(): SelectUnit(): MouseHitMap(PickedX(),PickedZ())
If CursorStatus=1 Then PostBuilding()
EndIf
If KeyHit(1)
If CursorStatus=0 Then Exit
ClearMouseStatus()
CursorStatus=0
EndIf
If KeyHit(6) Then CreateUnit( 1,PickedX(),PickedY()+1,PickedZ())
DrawSelectUnit()
DrawImage MousePointer,MouseX(),MouseY()
Flip
Forever
Function SelectUnit()
For Unit.TUnit = Each TUnit
If Unit<>Null
; EntityPickMode Unit\Model,2
; AnimEntityPickMode(Unit\Model,2) ;перенес в создание юнита
If Pick%= Unit\Model
Unit\Selected=True
Else
Unit\Selected=False
EndIf
EndIf
Next
End Function
Function DrawSelectUnit()
max#=10000000.0
For Unit.TUnit = Each TUnit
If Unit<>Null
If Unit\Selected=True
CameraProject(Cam,EntityX(Unit\Model),EntityY(Unit\Model)+Unit\ModelHeight#+0.5,EntityZ(Unit\Model))
If EntityInView(Unit\Model,Cam)=True
tY=TerrainY(terrain,EntityX(Unit\Model),EntityY(Unit\Model),EntityZ(Unit\Model))
PositionEntity SelectUnitSprite,EntityX(Unit\Model),tY+.1,EntityZ(Unit\Model)
max#=Unit\ModelWidth#
If Max#>Unit\ModelDepth# Then max#=Unit\ModelDepth#
ScaleSprite SelectUnitSprite,max#,max#
ShowEntity SelectUnitSprite
NewInterface.TInterface=First TInterface
StartDraw
SetBlend FI_ALPHABLEND
DrawImageEx Unit\Avatar ,NewInterface\AvatarX,NewInterface\AvatarY
DrawImageEx Unit\Icon ,NewInterface\IconX,NewInterface\IconY
EndDraw
UnitHealth(Unit\MaxHealth,Unit\NowHealth,ProjectedX#(),ProjectedY#(),True)
Return 0
EndIf
EndIf
EndIf
Next
HideEntity SelectUnitSprite
Return 0
End Function
Function UnitHealth(MaxHealth,NowHealth,Unit_X,Unit_Y,Viseble)
If Viseble=True
mxh=((MaxHealth/10)/4)
If NowHealth/10=MaxHealth/10 Or NowHealth/10>= ((mxh*3)) Then Color 0,255,0
If NowHealth/10>= ((mxh*2)) And NowHealth/10<((mxh*3)) Then Color 255,255,0
If NowHealth/10<= ((mxh*2)) Then Color 0,255,0
;Color 255,0,0
Rect Unit_X-(MaxHealth/10)/2,Unit_Y,MaxHealth/10,6,0
Rect Unit_X-(MaxHealth/10)/2,Unit_Y,NowHealth/10,6,1
Color 255,255,255
Return 0
EndIf
Return 0
End Function
|
(Offline)
|
|
28.05.2007, 04:34
|
#36
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: Как узнать размер меша?
|
(Offline)
|
|
28.05.2007, 11:53
|
#37
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Как узнать размер меша?
черт, как я сразу недопер.
ведь функция возвращает хендл пикнутого ентити и етот хендл несовпадает с хендлом родителя. надо проверять нет ли ентити с таким хендлом среди детей.
function IsMyChild(ent,child)
for i=1 to countchildren(ent)
ismychild(ent,child)
next
if ent=child then itistrue=1 ; itistrue - глобальная переменная
end function
короче обнуляеш переменную, вызываеш ф-ию и потом смотриш значение перменной.
|
(Offline)
|
|
29.05.2007, 01:42
|
#38
|
Модератор
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений (для 44 пользователей)
|
Re: Как узнать размер меша?
HolyDel спасибо но МоКа тебя опередил и с этим
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:06.
|