Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 11.01.2007, 22:47   #1
Horror
Бывалый
 
Регистрация: 09.09.2006
Сообщений: 656
Написано 54 полезных сообщений
(для 110 пользователей)
элементы из типа

Всем привет!
делаю что то вроде как в стратегиях выбор несколько юнитов!
есть тип
 
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
а еще есть команда хендел чтоль может с ней поработать?

зарание спасибо!
(Offline)
 
Ответить с цитированием
Старый 11.01.2007, 23:27   #2
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Re: элементы из типа

1. В чём вопрос? В потоке сознания не вижу четкой формулировки просьбы к комьюнити.
2. Ошибка вне приведенного кода. В таком виде всё должно работать.
3. Если уж кидать тапками, то применение в БЕЙСИКах оператора ветвления IF без THEN является дурным тоном, которого следует избегать.
(Offline)
 
Ответить с цитированием
Старый 12.01.2007, 00:43   #3
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: элементы из типа

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

Последующие подобные рассуждения в теме будут удаляться.
(Offline)
 
Ответить с цитированием
Старый 12.01.2007, 05:02   #4
stone_evil
ПроЭктировщик
 
Регистрация: 17.10.2006
Сообщений: 170
Написано 18 полезных сообщений
(для 42 пользователей)
Re: элементы из типа

3. Если уж кидать тапками, то применение в БЕЙСИКах оператора ветвления IF без THEN является дурным тоном, которого следует избегать.
Солидарен. Есть негласные правила программирования, и если хочешь вырасти как специалист в этой сфере, а не в конкретном продукте, лучше их придерживаться.
P.S. Хэндл тебе вряд ли поможет - тебе надо сделать универсальный алгоритм выделения и перемещения юнитов, а хэндл дает ид только одного из них. И это не единственная причина.
(Offline)
 
Ответить с цитированием
Старый 12.01.2007, 13:58   #5
Horror
Бывалый
 
Регистрация: 09.09.2006
Сообщений: 656
Написано 54 полезных сообщений
(для 110 пользователей)
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 
(Offline)
 
Ответить с цитированием
Старый 13.01.2007, 02:13   #6
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
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. запомни.
(Offline)
 
Ответить с цитированием
Старый 13.01.2007, 21:47   #7
Horror
Бывалый
 
Регистрация: 09.09.2006
Сообщений: 656
Написано 54 полезных сообщений
(для 110 пользователей)
HolyDel пасибо большое! теперь и в правду все выделяяется! как надо!

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

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


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Типа шейдеры... :-) L.D.M.T. 3D-программирование 1 14.02.2009 13:19
Копирование типа WaReZ_MEN 2D-программирование 3 14.07.2007 06:02
массив и его элементы Horror 3D-программирование 10 16.02.2007 23:28
Не помещаются элементы списков archerix Основной форум 2 11.09.2006 11:12
гы -гы - гы .... типа конкупс :) Raiter Болтовня 13 08.09.2006 08:25


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com