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=2377)

Horror 11.01.2007 22:47

элементы из типа
 
Всем привет!
делаю что то вроде как в стратегиях выбор несколько юнитов!
есть тип
Код:


Type unit
 Field status если-да то выделен
 Field ent    сама модель
 Field piv    пивот к которому идет юнит
 Field go    если пивот не уюнито то топаем до него
End Type

и по пику на террейне туда перемещается пивот и юнит идет к ниму
и все хорошо сделал! и выделяя последнего или либую комбинацию с последним они идут , а к примеру если выбираю 1 то ни он не идет

вообщем нада перебрать весь список и найти всех у кого статус=тру
ну чета не получается и как ето сделать?)
делаю так
Код:


For obj.unit=Each unit
If obj\status=True
PositionEntity obj\piv,PickedX(),PickedY()+0.1,PickedZ()
obj\go=True
EndIf
Next

а еще есть команда хендел чтоль может с ней поработать?

зарание спасибо!

Diplomat 11.01.2007 23:27

Re: элементы из типа
 
1. В чём вопрос? В потоке сознания не вижу четкой формулировки просьбы к комьюнити.
2. Ошибка вне приведенного кода. В таком виде всё должно работать.
3. Если уж кидать тапками, то применение в БЕЙСИКах оператора ветвления IF без THEN является дурным тоном, которого следует избегать.

alcoSHoLiK 12.01.2007 00:43

Re: элементы из типа
 
Цитата:

Сообщение от Diplomat
3. Если уж кидать тапками, то применение в БЕЙСИКах оператора ветвления IF без THEN является дурным тоном, которого следует избегать.

Замечание в данной ситуации несущественно. Можешь побеседовать на эту тему с автором лично)

Последующие подобные рассуждения в теме будут удаляться.

stone_evil 12.01.2007 05:02

Re: элементы из типа
 
Цитата:

3. Если уж кидать тапками, то применение в БЕЙСИКах оператора ветвления IF без THEN является дурным тоном, которого следует избегать.
Солидарен. Есть негласные правила программирования, и если хочешь вырасти как специалист в этой сфере, а не в конкретном продукте, лучше их придерживаться.
P.S. Хэндл тебе вряд ли поможет - тебе надо сделать универсальный алгоритм выделения и перемещения юнитов, а хэндл дает ид только одного из них. И это не единственная причина.

Horror 12.01.2007 13:58

Re: элементы из типа
 
Сори видимо не правельно задал вопрос)
НАДО чтоб юниты выделялись как в стратегиях(т.е. я могбы выбрать мышкой любова и тот должен идти куда я ткнул)
п.с. вот весь код(упростил как мог))
сейчас я могу управлять одним(последним) или всеми
а должно чтоб любым в любых комбинациях
помогите плиз)
Код:

Graphics3D 800,600,32,1
;KAMEPA
Global CamPiv=CreatePivot()
Global Cam=CreateCamera(CamPiv)
CameraRange cam,.1,150
CameraFogRange cam,90,150
CameraClsColor cam,0,0,0;150,200,250
CameraFogMode cam,1
CameraFogColor cam,0,0,0;150,200,250
TurnEntity Cam,55,0,0
MoveEntity Cam,0,35,-30
MoveMouse GraphicsWidth()*0.5,GraphicsHeight()*0.5
 
Sun=CreateLight(1)
TurnEntity Sun,45,45,0
LightColor Sun,100,100,100
AmbientLight 150,150,100
;Tun
Type unit
Field status
Field ent
Field piv
Field go
Field num
End Type
Const TERT=1,UNITT=2,TREET=3
Global Ground
Global terrain
;function: CO3gaEM Mup
Function create_World()
Collisions UNITT,TERT,2,3
Collisions UNITT,TREET,2,3
Collisions UNITT,UNITT,1,3
Collisions TREET,TERT,2,3
terrain=CreatePlane();LoadMesh("terrrain.b3d")
EntityColor terrain,0,95,0
EntityPickMode terrain,2
EntityType terrain,TERT
End Function
;CO3gaEM Mup
create_World()

Global M,CurrentFPS,mFPS,Twin#,FPS,Zoom#
Global mouse=False,x_s=0,y_s=0,x_e=0,y_e=0
Global obj.unit
;function: Co3gaEmM UNIT
Function create_Unit(x#,y#,z#,kol)
obj.unit=New unit
obj\ent=CreateCube()
ScaleEntity obj\ent,2,3,2
EntityRadius obj\ent,3
PositionEntity obj\ent,x,y,z
obj\piv=CreatePivot()
EntityType obj\ent,UNITT
EntityPickMode obj\ent,2
obj\status=False
obj\num=kol
End Function
;function: geucTBu9I UNIToB
Function Update_Unit();
speed#=-1
For obj.unit=Each unit
If Not obj\go Then Return
If Not obj\status Then Return ;)
PointToEntity(obj\ent,obj\piv);
MoveEntity obj\ent,0,0,speed#
If EntityDistance(obj\ent,obj\piv)<6 Then obj\go=False
Next
End Function
Function PointToEntity( src, dest)
RotateEntity src,0,DeltaYaw#(dest,src),0
End Function
 
;Co3gaEM UNIToB
create_unit(Rnd(32),8,Rnd(32),1)
create_unit(Rnd(32),8,Rnd(32),2)
create_unit(Rnd(32),8,Rnd(32),3)
;||||||||||||||||||||||||||||||||||||||||||||||||||||||
Repeat
 
If KeyDown(1) Exit
SetBuffer BackBuffer()
Cls
If mouse=False Then
If MouseDown(1)=True Then
mouse=True
x_s=MouseX()
y_s=MouseY()
x_e=MouseX()
y_e=MouseY()
End If
Else
x_e=MouseX()
y_e=MouseY()
If MouseDown(1)=False Then
select_unit()
mouse=False
End If
End If
For obj.unit= Each unit
If obj\status=True Then
TurnEntity obj\ent,0,4,0
End If
Next
MouseUpdate();gBu}|{eHuE KAMEPbI MbILLIKOu
GetFPS()
YnaJIo()
;UNITbI TOnaIOT)
If MouseDown(2) Then
pick=CameraPick(cam,MouseX(),MouseY())
If pick=terrain Then
For obj.unit=Each unit
If obj\status=True
PositionEntity obj\piv,PickedX(),PickedY()+0.1,PickedZ()
obj\go=True
EndIf
Next
EndIf
EndIf
Update_Unit();obj)
;
UpdateWorld()
RenderWorld(Twin#)
If mouse=True Then
Color 0,255,0
Line x_s,y_s,x_e,y_s
Line x_s,y_s,x_s,y_e
Line x_e,y_s,x_e,y_e
Line x_e,y_e,x_s,y_e
End If
;
Color 55,255,255
Text MouseX(),MouseY(),"*"
Text 10,10,"FPS: "+CurrentFPS
Flip;(0)
Forever
End
;||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Function MouseUpdate()
If M<MilliSecs() Then
M=MilliSecs()+100-Timescale*66
CaptureWorld()
If MouseX()<10 Then MoveEntity CamPiv,-8,0,0
If MouseX()>GraphicsWidth()-10 Then MoveEntity CamPiv,8,0,0
If MouseY()<10 Then MoveEntity CamPiv,0,0,8
If MouseY()>GraphicsHeight()-10 Then MoveEntity CamPiv,0,0,-8
;If MouseDown(2) Then TurnEntity CamPiv,0,MouseXSpeed(),0
Zoom#=Zoom+MouseZSpeed()
If Zoom<1 Then Zoom=1
If Zoom>4 Then Zoom=4
CameraZoom Cam,Zoom
MouseXSpeed()
MouseYSpeed()
EndIf
End Function
Function GetFPS()
If mFPS<MilliSecs() Then
mFPS=MilliSecs()+1000
CurrentFPS=FPS
FPS=0
Else
FPS=FPS+1
EndIf
Twin#=1-Float(M-MilliSecs())/100
End Function
;Bbl6op obj
Function select_unit()
If x_e<x_s Then
x=x_e
w=x_s-x_e
Else
x=x_s
w=x_e-x_s
End If
If y_e<y_s Then
y=y_e
h=y_s-y_e
Else
y=y_s
h=y_e-y_s
End If
For obj.unit= Each unit
CameraProject(cam,EntityX(obj\ent),EntityY(obj\ent),EntityZ(obj\ent))
If RectsOverlap(ProjectedX()-5,ProjectedY()-5,10,10,x,y,w,h)=True Then
obj\status=True
EntityColor obj\ent,0,0,255
Else
obj\status=False
EntityColor obj\ent,255,255,0
End If
Next
End Function
Function YnaJIo()
For obj.unit=Each unit
TranslateEntity obj\ent.unit,0,-1,0
Next
End Function


HolyDel 13.01.2007 02:13

Re: элементы из типа
 
ща буду провоидить воспитательные работы.
вот твоя функция:
Код:

Function Update_Unit();
speed#=-1
For obj.unit=Each unit
If Not obj\go Then Return
If Not obj\status Then Return ;)
PointToEntity(obj\ent,obj\piv);
MoveEntity obj\ent,0,0,speed#
If EntityDistance(obj\ent,obj\piv)<6 Then obj\go=False
Next
End Function
Function PointToEntity( src, dest)
RotateEntity src,0,DeltaYaw#(dest,src),0
End Function

вот моя (ну всмычле исправленная):
Код:

Function Update_Unit();
speed#=-1
For obj.unit=Each unit
;If Not obj\status Then Return ;)
If obj\go
PointToEntity(obj\ent,obj\piv);
MoveEntity obj\ent,0,0,speed#
If EntityDistance(obj\ent,obj\piv)<6 Then obj\go=False
EndIf
Next
End Function

команда return ПРЕРЫВАЕТ выполнение функции. поэтому неудивительно что идет токо первый юнит. или несколько первых, т.е. подпрограмка работает до первого return. запомни.

Horror 13.01.2007 21:47

HolyDel пасибо большое! теперь и в правду все выделяяется! как надо!

тока у меня они еще ВРАЩАЮТСЯ, из за DeltaYaw как остановить это вращение при стойке?
Можно конечно дельтоеу поменять на поинентити но тогда он набок лажиться
что скажите? как исправить??

как сделать кружечки под юнитами? ну как в стратежках [желтый,зеленный...]
делал спраитом или в максе просто кружечек .но както не красиво!


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

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