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

drave 24.08.2009 20:35

переход между уровнями ...
 
Ребятки , вы уж простите .... Но вот такая проблема , допустим подходит мой перс к двери ,кликает на неё ( типа входит) , и как сделать затемнение экрана на 2 секунды (переход) и потом перс уже стоит в другой комнате ( с норм экраном) ?!? И чтоб нада было иммено подойти к двери а не за километр навести на неё курсор и войти !

И расскажите чуток о камерапике , я как знаю без него в этом случае никак !


Я сам по себе чокнутый новичок Блитцер ( не могу жить без гейммекинга) , поэтому еси не ответите я опять буду всё ночь ломать голову ! :)

Данил 24.08.2009 20:45

Ответ: переход между уровнями ...
 
EntityPickMode к каждому entity, который можно пикнуть.
В цикле CameraPick(camera,x,y)
и EntityPick ( entity,range# ) или же EntityDistance# ( src_entity,dest_entity)

Цитата:

затемнение экрана на 2 секунды (переход)
- можно сделать черный спрайт, хотя это черезжопинг, не помню как правильно)

Цитата:

и потом перс уже стоит в другой комнате
выгружаем уровень , т.е. все модели карты и т.п. - загружаем все новое - ставим своего перса где надо, рассталвяем всех врагов - вот уровень два.

Illidan 24.08.2009 20:48

Ответ: переход между уровнями ...
 
Чтоб дверь срабатывала непосредственно вблизи, нужно помимо пика проверять расстояние от игрока до двери. Команда для этого entitydistance
для затемнения можно например заранее расположить перед камерой прозрачный квад и когда нужно затемнить экран делать его видимым, а дальше менять уровень и снова прозрачность на 0.
Карочь, вопросы элеменарные, так что в любом случае лучше поломай голову;)
З.Ы.Пока писал, уже опередили)))

NitE 24.08.2009 20:51

Ответ: переход между уровнями ...
 
Товарищи ! делайте ваши ставки - сколько вопросов породит эта фраза: "для затемнения можно например заранее расположить перед камерой прозрачный квад и когда нужно затемнить экран делать его видимым, а дальше менять уровень и снова прозрачность на 0." я ставлю 5-7

Illidan 24.08.2009 20:52

Ответ: переход между уровнями ...
 
Цитата:

Сообщение от Данил (Сообщение 116041)
- можно сделать черный спрайт, хотя это черезжопинг, не помню как правильно)

нет, не чрезжопинг))

Nite, тебе что-то непонятно? спрашивай, отвечу по мере своих знаний)))

ABTOMAT 24.08.2009 22:43

Ответ: переход между уровнями ...
 
Цитата:

- можно сделать черный спрайт, хотя это черезжопинг, не помню как правильно)
Это через жопу.
Нужно юзать IDirect3DDevice7::DrawIndexedPrimitive, что, по понятным причинам, в блице сделать никак.
Так что спрайт перед камерой - единственный способ сделать аппаратное затемнение на блице без либ.

NitE 24.08.2009 22:49

Ответ: переход между уровнями ...
 
Illidan, отвечать так как ты, таким как drave не следует, ибо они всёравно ничерта не поймут, и будут дальше спиногрызить

Andvrok 25.08.2009 00:56

Ответ: переход между уровнями ...
 
Вот функция, создает тело перед камерой
Код:

Function CreateDark()
        drk = CreateMesh(cam)
        srf = CreateSurface(drk)
                AddVertex srf, -1, 1, 0, 0, 0
                AddVertex srf, 1, 1, 0, 1, 0
                AddVertex srf, -1, -1, 0, 0, 1
                AddVertex srf, 1, -1, 0, 1, 1
                AddTriangle srf, 0, 1, 2
                AddTriangle srf, 3, 2, 1
                ScaleEntity drk, 1024.0 / Float(1024), 1024.0 / Float(768), 1
        PositionEntity drk, 0, 0, 1.0001
        EntityOrder drk, -100000
        EntityBlend drk, 1
        EntityColor drk,0,0,0
        HideEntity drk
End Function

Вместо 1024 и 768 можешь подставить свое разрешение экрана.

Потом когда надо используешь
Код:

ShowEntity drk
и For от 0 до 1 с шагом .02 или .01 и изменяешь альфу.
Код:

        For zt#=0 To 1 Step .02
                    EntityAlpha drk,zt#
                    RenderWorld
                    UpdateWorld
                    Flip
        Next


MiXaeL 25.08.2009 03:28

Ответ: переход между уровнями ...
 
А через изменение гаммы никак, кстати?
Сам особо не вникал, не приходилось как-то)

ABTOMAT 25.08.2009 03:36

Ответ: переход между уровнями ...
 
Цитата:

А через изменение гаммы никак, кстати?
В окне работать не будет.

IGR 25.08.2009 14:51

Ответ: переход между уровнями ...
 
Цитата:

Нужно юзать IDirect3DDevice7::DrawIndexedPrimitive,
хм... несовсем понял, а это зачем ??

drave 26.08.2009 20:17

Ответ: переход между уровнями ...
 
А вот тож вопросик , допустим я сделал проверку на пик и еси нажимают кнопку происходит затемнение , а далее ? Двигать камеру ( перса ) к какому нить dummy в комнате ( в которую переходят) ?! или подругому ?!

Nex 26.08.2009 20:52

Ответ: переход между уровнями ...
 
drave, если я не ошибаюсь, то удаляешь карту, загружаешь новую карту, ставишь игрока где надо и усе.

Illidan 26.08.2009 21:12

Ответ: переход между уровнями ...
 
можно и так и так. первый способ подходит больше для мгновенного перемещения, и затемнение тут, впринцыпе, лишне, но нужно правильно организовать выгрузку-подгрузку ресурсов, так как память не резиновая. Второй способ больше подходит тебе, так как ты, всёже, затемняешь экран, а это дает время для комфортной подмены уровней

drave 02.09.2009 03:12

Ответ: переход между уровнями ...
 
Блин... так как засорять форум неразумно , буду продолжать тут ... Драсти снова , эт опять я имба нуб drave , ребятки , ну хоть убейте ниче нимогу поделать ... Вот есть дверь , есть камера ( припарентинная к сфере) , как при наводке курсора ( прицела) проверить наведён ли курсор на дверь ?!?!? Помогите плиз ...:(

Nex 02.09.2009 07:28

Ответ: переход между уровнями ...
 
Вроде так.
Код:

If MouseDown (1) Then
        Pick = CameraPick (camera,MouseX(),MouseY())
                If Pick = door Then
                        ;тут код, что надо сделать если тыкнул в дверь
                EndIf                       
EndIf


drave 02.09.2009 20:07

Ответ: переход между уровнями ...
 
А вот фиг .... Не пашет и всё я уже так пробовал раз 50 наверно !

drave 02.09.2009 20:10

Ответ: переход между уровнями ...
 
SkyDream , может ты сбацаешь какой нить мини-примерчик , чтоб при наводке кубик он посветился а при нажатии на него и взлетал например ! ..... Все равно спс кстати !

PalVitalia 05.09.2009 18:37

Ответ: переход между уровнями ...
 
Graphics3D 640,480,16,2
camera=CreateCamera()
light=CreateLight()

player=CreateSphere()
PositionEntity player, 2, 0, 0
cam=CreateCamera(player)
TurnEntity player, 0,30,0

watertext=LoadTexture("floor.jpg")
water=CreatePlane()
PositionEntity water,0,-2,0
ScaleTexture watertext, 1,1
EntityTexture water,watertext

;create texture for the movie & 3d entity
movietex = CreateTexture(256,256,256+48)
cube = CreateCube()
EntityPickMode cube, 2
EntityTexture cube,movietex
MoveEntity cube,0,0,2

;load movie
movie = OpenMovie("video.avi")

While Not KeyHit(1)
If (MouseHit(1)=True)
ent = CameraPick(cam,MouseX(),MouseY())
If ent
If MoviePlaying(movie)=0
movie = OpenMovie("video.avi")
EndIf
EndIf
EndIf
If KeyDown(200) MoveEntity player,0,0,0.2
If KeyDown(208) MoveEntity player,0,0,-0.2
If KeyDown(203) TurnEntity player,0,2,0
If KeyDown(205) TurnEntity player,0,-2,0

DrawMovie(movie)
CopyRect 0,0,256,256,0,0,BackBuffer(),TextureBuffer(moviete x)

RenderWorld
Flip
Wend
End

Nex 06.09.2009 10:40

Ответ: переход между уровнями ...
 
Как то так... Я просто таким не страдал поэтому может можно и проще сделать.
Код:

Graphics3D 1024,768,32,2
        SetBuffer BackBuffer()
       
Global cube = CreateCube()
        EntityPickMode cube,2
        EntityColor cube,255,0,0
        RotateEntity cube,20,20,20
        PositionEntity cube,0,0,15
Global light = CreateLight()
        RotateEntity light,90,0,0
Global cam = CreateCamera()
Global Pick,Pick2



While Not KeyHit(1)
        Update()
        mouselook(cam)

RenderWorld()
Flip
Wend:End

Function Update()
        Pick = CameraPick (cam,MouseX(),MouseY())
                If Pick = cube Then
                        EntityColor cube,0,255,0
                                Else
                        EntityColor cube,255,0,0
                EndIf
               
                If MouseDown (1) Then
                        Pick2 = CameraPick (cam,MouseX(),MouseY())
                                If Pick2 = cube Then
                                        EntityColor cube,255,0,0
                                        MoveEntity cube,0,.5,0
                                EndIf
                EndIf
End Function



Function mouselook(ent) ; Функция обзора мышью
        mxspd#=MouseXSpeed()*0.25
        myspd#=MouseYSpeed()*0.25
                MoveMouse GraphicsWidth()/2,GraphicsHeight()/2       
        campitch#=EntityPitch(ent)+myspd#
                If campitch#<-85 Then campitch#=-85 ; ограничения поворота
                If campitch#>85 Then campitch#=85
                        RotateEntity ent,campitch#,EntityYaw(ent)-mxspd#,EntityRoll(ent)
End Function


drave 07.10.2009 01:02

Ответ: переход между уровнями ...
 
Кхм , как странно , использовал код SkyDream'а на обычном энтити , работает , но стоит вставить аниммэш и тогда уже пик не срабатывает ?! Не подскажите в чём фишка ?! Пик + Аниммэш = пососамба !!! ( Кстати SkyDream , низкий тебе поклон за помощ нубью ) !

Nex 07.10.2009 07:29

Ответ: переход между уровнями ...
 
drave, начет пик аниммеш я че то хз. Поидее должно и на нем работать. Может ты забыл добавить EntityPickMode? :)
Я тоже нуб еще и еще долго им буду и "нуб" мне кажется это как то грубо и не стоит этим словом себя или кого нибудь называть ибо каждый из нас в чем то нуб... :-)

3dr1aN 07.10.2009 13:38

Ответ: переход между уровнями ...
 
рекурсия. аниммеш проверять по чилдам.

drave 07.10.2009 16:07

Ответ: переход между уровнями ...
 
А по русски :) !? Покажи примерчик плиз !!!!:crazy:

EvilChaotic 07.10.2009 16:51

Ответ: переход между уровнями ...
 
Цитата:

Сообщение от drave (Сообщение 120878)
А по русски :) !? Покажи примерчик плиз !!!!:crazy:

Ну тут все просто. При загрузке через аним меш много чего отпадает и в то же время наоборот. Вот например текстурить его только по чилдам, пикать тоже по чилдам, чилды мы ищем в меше так FindChild(ent,who$)

Код:

FindChild ( entity,child_name$ )
Параметры
entity - указатель объекта
child_name$ - имя дочернего объекта для поиска 

Описание
Возвращает указатель на первый же дочерний объект указанного объекта, имя которого совпадает с child_name$.

Ну или проще напишу для тебя поконкретней. Надеюсь все правильно. Функция сработает если в аним меши есть чилды, автоматом присваивает всем чилдам заданный PickMode.

Код:

Function EntityPickModeAnim(entity,mode=2)
        If CountChildren(entity) > 0
                For childcount = 1 To CountChildren(entity)
                        child = GetChild(entity,childcount)
                        EntityPickMode child,mode
                Next
        EndIf 
End Function

Применять так:

entity = LoadAnimMesh("mesh.b3d")
EntityPickModeAnim(entity,2)


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

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