7 февраля 2010 в 14:52
Blitz3d уроки - 3. Перемещение объектов
Можно, конечно, до посинения смотреть на разные там вращающиеся кубы, сферы, конусы, цилиндры, свет, камеры – но когда-нибудь это надоест. Кроме того – игра (а ведь мы именно игры хотим писать а не всякие там трёхмерные абстрактные пейзажи) требует ввода чего-нить-там с клавиатуры…
Ну, тогда давайте разбираться с перемещением предмета.!cut! Я надеюсь, что предыдущие уроки вы хорошо освоили, так что начнём сразу с такого шаблона:
Graphics3D 640,480,16,1 SetBuffer BackBuffer() cam=CreateCamera() PositionEntity cam,0,5,-10 lit=CreateLight() cub=CreateCube() Repeat UpdateWorld RenderWorld Flip Until KeyHit(1) End
Здесь мы (по порядку) инициализируем графику, создаём камеру, свет, куб и в цикле всё это рендерим и выводим на экран, пока не будет нажата клавиша Esc. Обратите внимание, что здесь мы поменяли позицию камеры (а не куба, как в прошлый раз), и теперь она имеет координаты X=0 Y=5 Z=-10. В итоге, получилось, что мы смотрим на куб сзади, и чуть-чуть сверху…
В нашем распоряжении имеется куб. Наша миссия двигать его, в направлении, задаваемом с клавиатуры. Итак, новые команды:
KeyDown(сканкод) – (вообще-то не команда, а функция) – проверяет, нажата ли соответствующая клавиша. В скобках нужно указать сканкод клавиши (Сканкоды клавиш можно узнать в хелпе Блитц3Д, в разделе Command Reference). Мы будем управлять клавишами управления курсора и манипулятором типа мышь . Значит сразу напишу сканкоды (всем запомнить – пригодится): кнопка вверх – 200, вниз – 208, влево – 203, вправо – 205. С мышой потом.
MoveEntity объект, перемещение по X, по Y, по Z – перемещает объект относительно своей собственной системы координат (помните писал ).
Так, у нас есть команда проверки нажатия клавиш, и есть команда перемещения объекта… осталось только связать их вместе. Как это сделать? Очевидно, просто надо поставить условие – н-р. ЕСЛИ НАЖАТА кнопка ВВЕРХ то ПЕРЕДВИНУТЬ ОБЪЕКТ ВПЕРЁД, ну, и так далее… Я надеюсь вы прочитали туториал по основам БлитцБейсика, поэтому команду условия IF я уж объяснять не буду…
А так это должно выглядеть:
If KeyDown(200) MoveEntity cub,0,0,.1
Поставьте это условие в начало цикла, и запустите прогу. Теперь, когда вы будете нажимать кнопку вверх, куб будет двигаться по направлению своей оси Z… то есть вперёд!
По аналогии сделаем остальные условия:
If KeyDown(208) MoveEntity cub,0,0,-.1 If KeyDown(203) MoveEntity cub,-.1,0,0 If KeyDown(205) MoveEntity cub,.1,0,0
Полностью код выглядит так:
Graphics3D 640,480,16,1 SetBuffer BackBuffer() cam=CreateCamera() PositionEntity cam,0,5,-10 lit=CreateLight() cub=CreateCube() Repeat If KeyDown(200) MoveEntity cub,0,0,.1 If KeyDown(208) MoveEntity cub,0,0,-.1 If KeyDown(203) MoveEntity cub,-.1,0,0 If KeyDown(205) MoveEntity cub,.1,0,0 UpdateWorld RenderWorld Flip Until KeyHit(1) End
Ну – кубик двигается! Что ещё нужно для счастья? Я думаю достаточно… …но Блитц3Д предоставляет нам очень много возможностей на этой почве, и в следующих уроках мы постараемся уяснить самые важные.
7 марта 2011 в 16:45
Картинка существует, пробовал даже несколько вариантов, но все равно вылазит ошибка Runtime error: Texture does not exist (текстуры не существует)
28 апреля 2011 в 20:41
Чтобы блитц не ругался на текстуры, они должны быть квадратными и (вроде-бы) со стороной, кратной степени двойки (т.е. 2, 4, 8, 16, 32, и т.п.)
18 июня 2011 в 17:54
извеняюсь что так поздно но для файлов вроде бы не надо указывать полный путь, они должны лежать в папке с прогой и путь указывается лиш в папку с файлом например textures
авторизуйтесь
или войдите через