![]() |
Анимация (и еще пару вопросов)
Привет всем. Я только начал изучать Блиц, так что возникают некоторые проблемы .( Вот уже 2 часа бъюсь над ними... безрезультатно. Надеюсь здесь найдутся добрые люди :)
Вот в чем проблема: при загрузки модели и анимации к ней... она не хочет проигрываться при запуске программы. Надо например прописать If KeyDown(17) Animate Bochka. тогда после надатия клавишь меш анимируется. Как сделать, чтобы он анимировался сразу. Это была первая проблема .) Теперь вторая: я загружал модель через LoadMesh, и просчитывал коллизию. А так как этот объект анимируется, приходится загружать через LoadAnimMesh, и тогда коллизия перестает просчитываться :(. А так как этот объект появляется в случайном месте, то я не могу на тех же координатах создать еще один объект (для коллизии). Помогите пожалуйста. И еще вопросик. Здесь есть поиск по темам форума? |
Re: Анимация (и еще пару вопросов)
1) Пиши не If KeyDown(17) Animate Bochka , а просто Animate Bochka
2) Никогда не слышал, что анимированные объекты не колизятся 0.о Скорее ты что-то напутал с колизиями. Покажи код... Цитата:
Существуют такие команды, как: EntityX(entity),EntityY(entity),EntityZ(entity) которые возвращают соответственно координаты X,Y,Z объекта. Юзаем эти команды... PositionEntity Object2, EntityX(Object1), EntityY(Object1), EntityZ(Object1) |
Re: Анимация (и еще пару вопросов)
Вот именно, что если писать просто Animate bochka, она не анимируется. Я даже в проверку отдельную прогу написал:
Graphics3D 800,600,16,1 SetBuffer BackBuffer() cam=CreateCamera() PositionEntity cam,0,10,0 lit=CreateLight() PositionEntity lit,10,20,-20 bochka=LoadAnimMesh("bochka.b3d") PositionEntity bochka,0,0,10 LoadAnimSeq bochka,"bochka.b3d" PointEntity cam,bochka Repeat Animate bochka UpdateWorld RenderWorld Flip Until KeyHit(1) End бочка не анимируется. а если вместо Animate bochka вставить If KeyDown(17) Animate bochka, то после нажатия W, ана начинает анимироваться. 2) Странно. при LoadMesh все нармально, а при LoadAnimMesh коллизии пропадают... ну я еще попробую отдельно написать (как для анимации), может в коде что-то перепуталось. Ага. попробую повазвращать координаты. Благодарю. |
Re: Анимация (и еще пару вопросов)
Цитата:
Ещё есть у каждого поста кнопочка "Thanks", обычно форумчане любят если их поблагодорят такой кнопочкой ;) Animate Bochka нужно вызывать 1 раз. А именно: If AnimSeq(Bochka)<>0 Anima Bochka Сразу запуститься анимация. |
Re: Анимация (и еще пару вопросов)
Делай так ! когда ты создавал модель в максе
у нее было имя к примеру Box01 в блитце допиши этот код bochka_mdl=LoadAnimMesh("bochka.b3d") bochka=FindChild(bochka_mdl,"Box01") PositionEntity bochka,0,0,10 команда ФиндЧаил ищет объект в твоей сцене просто при экспорте из пепилаина появляется такая иерархие... |
Re: Анимация (и еще пару вопросов)
Конечно, ничего не коллизится - при аниммеш, как результат получаешь хендл "пивота", а не модель. Используй последний параметр
EntityType entity,collision_type[,recursive] подними его. |
Re: Анимация (и еще пару вопросов)
impersonalis, спасибо. заработало.)
MoKa, я уже пытался подобное написать. Анимации всеравно почемуто нет. и... ты наверно имел ввиду If AnimSeq(Bochka)=0 Anima Bochka :) Horror, не совсем понял, чем лучше такие манипуляции.. но после них вообще ничего не работает :(. Пишет Entity has no animation/ или еще находит отговорки.. |
Re: Анимация (и еще пару вопросов)
Ура товариши! Все работает :) Я не в ту функцию писал .))
|
Re: Анимация (и еще пару вопросов)
А чем можно загрузить гиф анимацию? Через LoadSprite неполучается... Еще в хелпе нашел LoadAnimImage... но что-то та же история.
И как можно узнать какие форматы поддерживают некоторые команды, типа LoadSprite и LoadMesh? |
Re: Анимация (и еще пару вопросов)
Ну помогите ктонибудь загрузить гиф анимацию...:''((
еще вопросик: можно ли сделать чтобу в общем цыкле (который идет бесконечно) некоторые команды прокрутились только один раз? например добаитьв цыкл вывод надписи... чтобы она один раз выводилась.... |
Re: Анимация (и еще пару вопросов)
Вложений: 2
Может я и ошибаюсь, но блиц гиф анимацию не воспроизводит...
LoadAnimImage юзается для анимационной ленты... LoadAnimImage Изображение,ширина "кадра", высота "кадра", номер первого кадра ( 0 ), общее количество кадров Отсчет кадров идет с 0. Тоесть 1 кадр = 0, 2 кадр = 1 и т.д Для вывода изображения на экран юзаем DrawImage изображение, позиция X, позиция Y, кадр Вот пример. Анимационная лента из 3 кадров (лежит в аттаче). При нажатии пробела, меняем кадр на следующий, при достижении предела кадров меняем на первый. Код:
Graphics 800,600,32,1Цитата:
Код:
Graphics 800,600,32,1 |
Re: Анимация (и еще пару вопросов)
Ааа. так вод для чего LoadAnimMesh... мог бы и сам догадаться .))
А вот со вторым вопросом неувязачка вышла. Такой трюк проходитесли есть какая-то переменная, которую надо один раз поенять. Но как это применить если надо вывести текст или спрайт? ЗЫ: все. доперло. Огромное спасибо.) |
Re: Анимация (и еще пару вопросов)
Цитата:
sample=OpenMovie("sample.gif") repeat drawmovie sample,x,y,w,h renderworld() flip until keyhit(1) closemovie sample end |
Re: Анимация (и еще пару вопросов)
Что-то прогал я прогал... все поперепрогал... теперь помошь нужна. Поможете? :support:
1. здесь был огромный вопрос, на который я нашел ответ в процессе его написания 2. неповерите, но я даже не начал вопрос писать, и уже сам допер. Хотя парился пол дня. Прям исцеление. 3. Блин. От радости третий вопрос забыл :( |
Re: Анимация (и еще пару вопросов)
Вспомнил! Как можно узнать координаты объекта? Всмысле координаты того места, где он находится.
|
Re: Анимация (и еще пару вопросов)
EntityX(entity,[global])
EntityY(entity,[global]) EntityZ(entity,[global]) Я тебе эти команды давал ещё во 2 потсте ;) |
Re: Анимация (и еще пару вопросов)
Raiter, аа. вот где я их видел. А я уже все учебники перелистал... Спасибо.
|
Re: Анимация (и еще пару вопросов)
Цитата:
|
Re: Анимация (и еще пару вопросов)
Блин. Я в тупике малость. Вопервых почитал статью про ограничение ФПС в BlitzEtc... сделал... и после этого появилось куча глюков связаных с логикой. Например после нажатия паузы на экране все останавливается, а на самом деле все дальше просчитывается... т.е. при отжати паузы события резко меняются .)) (до этого пауза работала нармально).
Блиц же как-то ограничивает ФПС (flip) до 75... и нет никаких багов... неужели нет такого способа? И второе. Мне надо, чтобы при столкновении корабля с препядствием происходил взрыв.. и он появлялся в начале уровня... Но тут происходят 2 проблемы. 1. Надо чтобы при столкновении корабль изчезал, проигрывалась анимация взрыва, потом корабль появлялся в начале... вот я не могу сделать, чтобы корабль изчезал... да, и еще надо чтобы во время взрыва остальной мир продолжал просчитываться, т.е. надо как-то эти умирания, возраждения оторвать от основного цикла... но как? 2. не могу сделать, чтобы анимация взрыва появлялась на месте корабля... У меня корабль постоянно посередине экрана, поэтому я пытался сделать так: DrawImage boom,EntityX(player,True)+wi*0,5,EntityZ(player,Tr ue)+hi*0,5,m (wi - ширина экрана, hi - длина) но взрыв ходит все рядом, все около. То правее, то левее, то ниже.... |
Re: Анимация (и еще пару вопросов)
На счет второго пункта... можно реализовать взрыв LoadAnimTexture наложеным на плоскость... но всеравно это надо как-то вытащить из цыкла .(
|
Re: Анимация (и еще пару вопросов)
Цитата:
ставь флип 0 или флип фальше !! Цитата:
function DeadShip(...,...,...) ... End Function |
Re: Анимация (и еще пару вопросов)
Цитата:
Код:
...Цитата:
Код:
HideEntity ShipЦитата:
Цитата:
Ну а если уж даже 2д рисовать, и корабль у тебя всегда в центре экрана, то зачем тебе брать его координаты? DrawImage boom,GraphicsWidth()*0.5, GraphicsHeight*0.5,m |
Re: Анимация (и еще пару вопросов)
Цитата:
Цитата:
Цитата:
Цитата:
вернее вот так: (код находится в главной функции цыкла.. короче постоянно прокручивается, в этом и проблема.) Код:
If EntityCollided (player,typewalls) Or EntityCollided (player,typeMolnia)IGR, фунции дают такой же эффект. |
Re: Анимация (и еще пару вопросов)
Так у тебя этот код будет работать только в момент колизии...
Попробуй так: Код:
If EntityCollided (player,typewalls) Or EntityCollided (player,typeMolnia) Then ShipDeath = 1 |
Re: Анимация (и еще пару вопросов)
Raiter, ничего не изменилось .(
Как анимированый спрайт загрузить? Какой командой? или надо кучу спрайтов загружать по верх предыдущего? И еще, можно как-то получить координаты столкновения при коллизии? |
Re: Анимация (и еще пару вопросов)
анимирований спрайт нельзя !!
loadAnimImage-ом с альфой текстуриш какой-то обьект, который будет появлятся во время взрыва !! Цитата:
|
Re: Анимация (и еще пару вопросов)
Цитата:
это вообще относится к 2д! текстурить можно текстурами... LoadTexture LoadAnimTexture Раз уж делать таким способом, то: Код:
...Цитата:
|
Re: Анимация (и еще пару вопросов)
Raiter, аа, ну с LoadAnimTexture все понятно.. я так електричество делал... просто ты сказал
Цитата:
Щас поюзаю EntityDistance... может баг один уйдет.. ;) |
Re: Анимация (и еще пару вопросов)
Цитата:
|
Re: Анимация (и еще пару вопросов)
Я так понимаю EntityDistance будет побыстрее проверки на коллизию?
А если предмет прямоугольно-вытюнотой формы, EntityDistance никак не приминить? |
Re: Анимация (и еще пару вопросов)
EntityDistance сработает не завсимо от формы ентити :)
|
Re: Анимация (и еще пару вопросов)
Цитата:
|
Re: Анимация (и еще пару вопросов)
Как можно крутить картинку загруженую LoadImage? и как можно ей задать родителя (привезать)? Или если нельзя привизать, то как здвинуть ей пивот? (если он у нее вобщем-то есть.))
|
Re: Анимация (и еще пару вопросов)
Цитата:
|
Re: Анимация (и еще пару вопросов)
Raiter, блин. так и думал. А как можно спрайт или ентити поверх ГУИ нарисовать ума не приложу... ладно, раз нет таких команд будем дальше мозгами шевелить.
|
Re: Анимация (и еще пару вопросов)
что-бы что-то рисовалось поверх чего-то используй ЕнтитиОрдер !!
(но насчёт Гуи не знаю ) |
Re: Анимация (и еще пару вопросов)
Maestro
entitydistance - это расстояние между центрами объектов. легко замняется простой геометрической формулой расстояния между двумя точками в 3-х мерном пространстве dist=sqrt(x1*x2+y1*y2+z1*z2) |
IGR, команда хорошая... только был бы аналок ее применимый к картинкам...
Leito, ну и зачем мне между двумя точками, если у меня длинный прямоугольник? а вычислять перпендикуляр к отрезку прямоугольника геморойно (может конечно потом какнить сделаю). Я просто для них коллизию сделал... Вообще чтонибудь можно вывести поверх картинки (DrawImage) кроме другой картинки? Raiter, и крутить нельзя? |
Re: Анимация (и еще пару вопросов)
Maestro RotateImage
|
Raiter, хжутка тормозная функция
Maestro, ты спрашивал что значит эта функция, я ответил! |
Re: Анимация (и еще пару вопросов)
Да. функция жуууутко тормозная .) но я уже все переделал... и все работает... ну, почти все. Осталось только разобраться со взрывом. Что же с ним делать? Если прописывать так как раньше (гдето выше есть), то и корабль не изчезает, и мир останавливается... так не пойдет. Если за один цыкл давать команду спрятать и показать, то он прочитает это все и при прорисовке и не подумает прятать корабль...
Короче уже незнаю что делать .( |
Re: Анимация (и еще пару вопросов)
Свяжись со мной по аське. Я тебе сделаю..
|
Re: Анимация (и еще пару вопросов)
Ктонибудь может объяснить что выщитывает MilliSecs()? какие значения принимает... можно л еу задовать значения... и т.д. вобщем поподробнее, а то в хелпе немного непонятно написаро...:@
|
Re: Анимация (и еще пару вопросов)
Maestro, эта команда покажет тебе системное время в милисекундах. Менять его нельзя. Это может понадобиться если тебе надо вычислить время, за которое было совершено какое-то действие (например, рендер мира - если это время слишком большое то значит геометрия чудит):
rendertime = Millisecs() RenderWorld() rendertime = Milliseca - rendertime Примерно должно быть равно 5-10. Если больше то значит что-то у тя там не чисто дело. Кстати, зная время рендера мона вычислить FPS - для этого 1000 нуно поделить на время рендера (1 секунда = 1000 мсек) ;) З.Ы. Ну, вру, это не точное вычисление ФПС - ведь мы измеряем только время рендера, а ФПС составляет весь цикл. Ну, короче, подумай на досуге. На твой вопрос я ответил. |
Re: Анимация (и еще пару вопросов)
Belamore, значит каждый раз, вначале цыкла Millisecs() обнуляется, и считает милисикунды, пока этот цыкл не зываршится?
|
Re: Анимация (и еще пару вопросов)
Maestro
millisecs() ето просто таймер, он работает все время :) никогда не обнуляется к примеру : в начале проги пишем ms = millisecs() ... в цикле work = Millisecs() - ms print "programm work time : "+work ... |
Re: Анимация (и еще пару вопросов)
jimon, не он обнуляется иногда.)
|
Re: Анимация (и еще пару вопросов)
Гм. странные она значения принимает.
Скопируйте это в блиц: While Not KeyHit(1) Print MilliSecs() Wend Там какие-то гиганские цыферки получаются... почему он не с нуля считает? |
Re: Анимация (и еще пару вопросов)
Maestro
оно начинает с нуля ... когда винда стартует (поидее) хотя фиг его знает что собсно оно щитает ps. из справки модуля blitzmax'а : "Get millisecond counter Returns: Milliseconds since computer turned on." так что оно возвращает количество милисек со времени врубления компа |
Re: Анимация (и еще пару вопросов)
Гыыы. у меня за миллиард перевалило .)))
может ты знаешь как решить одну проблемку? Короче проблема у меня со взрывом. Надо чтобы при столкновении корабль изчезал, проигрывался взрыв, потом корабль оживал... впринципе я все это сделал, НО единственнй способ, которым я смог сделать взрыв - это постоянно проигрывать анимтекстуры на модели, а саму модель при столкновении показывать, и при окончании кадров в ленте (некстуре) опять прятать... поэтому при столкновении анимация проигрывается не с начала, а как захочет... Может можно как-то подругому сделать... или этот способ модфицировать... |
Re: Анимация (и еще пару вопросов)
1000000000/1000 = 1000000 секунд
1000000/3600 = 277 часов 277/24 = 11,5 суток тоесть у тя полторы недели комп включен. вывод: ты гонишь. или команда показывает не "количество милисек со времени врубления компа" |
Re: Анимация (и еще пару вопросов)
Цитата:
|
Leito, упс. обсчитался. не миллиард, а 100 миллионов .))
Фух. Со взрывом разобрался. Так что если кто-то хотел помочь, обломитесь .) сам сделал.) Как только будут звуки вылажу демку (правда она отличается от прошлой практически только внешним видом:)) |
Re: Анимация (и еще пару вопросов)
LaZZZeR, рекорд! Millisecs()=2 милиарда!
довайте соревнование устроим! по времени включения компа)) причем не перезагружая его! |
Re: Анимация (и еще пару вопросов)
Leito, ага. только подтверждать скриншотом...
|
Re: Анимация (и еще пару вопросов)
Вот наконец добрался до звуков... что-то у меня не получается с первым же звуком. Проблема вот в чем: надо, чтобы при навидении на кнопку проигрывался один звук, при нажатии другой... ну короче все как положено. Но не могу реализовать. У меня есть функция для кнопки:
Код:
Function RefreshButton(ImBtn,x,y,txt$,n)Код:
Function RefreshButton(ImBtn,x,y,txt$,n)ЗЫ: и почему не грузятся шрифты в названии которых присутствует "_"? |
Re: Анимация (и еще пару вопросов)
Цитата:
|
Re: Анимация (и еще пару вопросов)
IGR, ыы. если ставить sou=0, при наведении курсора на кнопку вообще не будит никаких звуков, а при нажатии на кнопку (если не отпускать ЛКМ) звук проигрывается вечно.
А нет команды типа MouseDown(1), только чтобы проверялось не нажатие, а отжатие после нажатия? |
Re: Анимация (и еще пару вопросов)
тогда зделай две переменных для звуков sou1 , sou2 !!
и попробуй так : Function RefreshButton(ImBtn,x,y,txt$,n) mx=MouseX(): my=MouseY() MHit=MouseDown(1) If RectsOverlap(x,y,ImageWidth(ImBtn),ImageHeight(ImB tn),mx,my,1,1) sou1=1 f=1 y2=0 If MHit=True sou2=1 f=2 y2=2 Button(n)=1 EndIf Else f=0 y2=0 EndIf If sou1=1 Then PlaySound SelectBut sou1=0 EndIf If sou2=1 Then PlaySound ClickBut sou2=0 EndIf DrawImage ImBtn,x,y,f Color 0,0,0 Text x+0.5*(ImageWidth(ImBtn)+4-Len(txt$)*FontHeight()*0.5),y+0.5*(ImageHeight(ImB tn)-4-FontHeight())+y2,txt$ End Function |
Re: Анимация (и еще пару вопросов)
Да нет. я так тоже пытался. Смотри. Мы пишем
If sou1=1 Then PlaySound SelectBut sou1=0 EndIf Но тут же проверяем, наведен ли курсор на кнопку, получаем положительный ответ, и... If RectsOverlap(x,y,ImageWidth(ImBtn),ImageHeight(ImB tn),mx,my,1,1) sou1=1 f=1 ... Следовательно звук каждый раз и проигрывается. |
Re: Анимация (и еще пару вопросов)
Цитата:
или ты хочеш чтоб звук проигрался один раз когда ты только первый раз подвидеш мышку к кнопке ?? тогда напиши : If RectsOverlap(x,y,ImageWidth(ImBtn),ImageHeight(ImB tn),mx,my,1,1) sou1=sou1+1 f=1 y2=0 ..... следовательно когда мы второй раз проверяем RectsOverlap то sou1=2 и звук играть не будет !! |
Re: Анимация (и еще пару вопросов)
Вложений: 2
IGR, мне надо, чтобы при наведении на одну кнопку проигрался один звук один раз, потом если отвести от кнопки курсор, а потом навести обратно на нее же или на другую кнопку, сново проигрался тот же звук один раз.
Поэтому если наращивать переменную sou1=sou1+1, ее надо как-то вернуть если увести курсор от кнопки.... Вот кстати код (там звуки и кнопка прилогаются) |
Re: Анимация (и еще пару вопросов)
Function RefreshButton(ImBtn,x,y,txt$,n)
mx=MouseX(): my=MouseY() MHit=MouseDown(1) If RectsOverlap(x,y,ImageWidth(ImBtn),ImageHeight(ImB tn),mx,my,1,1) sou1=1+1 f=1 y2=0 If MHit=True sou2=1 f=2 y2=2 Button(n)=1 EndIf Else sou1=0;если мышко не возле кнопки - обнуляем переменную f=0 y2=0 EndIf If sou1=1 Then PlaySound SelectBut sou1=0 EndIf If sou2=1 Then PlaySound ClickBut sou2=0 EndIf DrawImage ImBtn,x,y,f Color 0,0,0 Text x+0.5*(ImageWidth(ImBtn)+4-Len(txt$)*FontHeight()*0.5),y+0.5*(ImageHeight(ImB tn)-4-FontHeight())+y2,txt$ End Function код шас посмотреть не могу, так как я не дома !! вечером посмотрю !! |
Re: Анимация (и еще пару вопросов)
Ну. вот мы проктически и пришли к моему первому варианту. Проблема в том, что все после Else выполняется почемуто в любом случае... и все время sou1=0, следовательно звук вообще никогда не проиграется. А т.к. sou2=1 всегда, то при нажатии и держании кнопки мыши постоянно будет проигрываться звук нажатия .) Короче замкнутый круг.
|
| Часовой пояс GMT +4, время: 05:06. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot