|
3D-программирование Вопросы, касающиеся программирования 3D мира |
27.09.2005, 19:55
|
#1
|
Знающий
Регистрация: 07.09.2005
Сообщений: 238
Написано 2 полезных сообщений (для 2 пользователей)
|
Я думаю что на этот вопрос все знают ответ кроме меня
так что помогите мне !
Я делаю шутер, у меня есть аптечка, если я её взял то она должна исчезнуть и мне должны прибавится жизни (пока что всё идёт как надо). А вот вопрос :
Как сделать так чтоб через минуту аптечка опять появилась?
вот мой код :
Type apteka
Field obj
End Type
...
a.apteka=new apteka
a\obj=loadmesh("apteka.3ds")
entitytype a\obj,aptekatype
positionentity x#,Y#,z#
return true
...
For s.apteka=Each apteka
TurnEntity s\obj,0,1,0
If EntityCollided(player,aptekatype) <>0
Life#=Life#+50
FreeEntity s\obj
delete s
End IF
Next
|
(Offline)
|
|
27.09.2005, 20:36
|
#2
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
у тебя маленько неправильный подход, тут не нужно удалять объект, его нужно скрывать и запускать таймер по истичении которого аптечка снова появится... смотри пример:
graphics3d 800,600,32,2
setbuffer BackBuffer()
camera=createcamera()
rotateentity camera,45,0,0
positionentity camera,0,50,-50
rotateentity CreateLight(),20,40,0
type ap
field Xp#
field Yp#
field Zp#
field Time%
Field entity%
end type
; создаем несколько случайных аптечек
for i=1 To 3
apt.ap=new ap
apt\Xp=rnd(-40,40)
apt\Yp=0
apt\Zp=rnd(-40,40)
apt\time=0
apt\entity=createsphere()
EntityColor apt\entity,255,100,100
PositionEntity apt\entity,apt\Xp,apt\Yp,apt\Zp
EntityType apt\entity,2
next
; создаем игрока
player=createcube()
entitytype player,1
; назначаем коллизии
collisions 1,2,1,1
repeat
For apt.ap = Each ap
; проверяем, если таймер еще не в нуле, значит аптечки еще нет
; значит нужно уменьшить таймер на 1
If apt\time>0 Then
apt\time=apt\time-1
; если таймер после вычитания равен нулю, то пришло время аптечке появиться
If apt\time=0 Then showentity apt\entity
EndIf
; если игрок столкнулся именно с этой аптечкой, то...
If EntityCollided(player,2)=apt\entity
; тут добавляешь здоровье
; или еще чего
; скрываем аптечку и пускаем таймер
HideEntity apt\entity
apt\time=200
EndIf
Next
if KeyDown(203) Then TranslateEntity player,-0.5,0,0
if KeyDown(205) Then TranslateEntity player,0.5,0,0
if KeyDown(200) Then TranslateEntity player,0,0,0.5
if KeyDown(208) Then TranslateEntity player,0,0,-0.5
UpdateWorld
RenderWorld
Flip
until KeyHit(1)
end
тут действует такая фича, что к скрытым объектам коллизия не просчитывается.
__________________
Как минимум я помог многим (с)
|
(Offline)
|
|
27.09.2005, 21:23
|
#3
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Добавлю: не просчитывается также pick и прочее, т.к. HIDE убирает entity из процедуры рендера.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
27.09.2005, 22:41
|
#4
|
|
Originally posted by impersonalis@Sep 27 2005, 06:23 PM
HIDE убирает entity из процедуры рендера.
|
Это повсевместно используется в немалых проектах для того, чтобы не рендерить объекты, которые находятся в области видимости камеры, но не видны для игрока.
А чем меньше объектов рендерится в кадре, тем больше FPS.
|
|
|
28.09.2005, 08:49
|
#5
|
Знающий
Регистрация: 07.09.2005
Сообщений: 238
Написано 2 полезных сообщений (для 2 пользователей)
|
УРААА !!
ВСЁ РАБОТАЕТ КАК НАДО ВСЕМ СПАСИБО !
|
(Offline)
|
|
18.10.2005, 18:49
|
#6
|
Знающий
Регистрация: 16.10.2005
Сообщений: 310
Написано 7 полезных сообщений (для 0 пользователей)
|
а хотябы демо версию своего шутера выложиш?)
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:02.
|