Суббота, 20.04.2024, 16:56
Приветствую Вас Гость | RSS

Light & New Live

Наш опрос

Нравится ли вам дизайн сайта
Всего ответов: 277

Статистика


Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Главная » 2007 » Сентябрь » 3 » как сделать 3d игру в game maker
14:29
как сделать 3d игру в game maker
Сайт, посвященный Game Maker'у.
Вы хотите развить компьютерные игры, не тратя бесчисленные часы, узнавая, как становиться программистом? Тогда Вы приехали в правильное место. Game Maker позволяет Вам делать захватывающие компьютерные игры, без потребности пистать кодом. Создание игр с Game Maker'ом - большая забава.


Вы можете создать профессионально выглядящие игры в пределах очень небольшого количества времени. Вы можете сделать игры с фонами, графикой, музыкой и звуковыми эффектами, и даже 3D игры! И когда Вы станете более опытными,то в Game Maker'е есть встроенный язык программирования, который дает Вам полную гибкость создания игр с Game Maker'ом.

Как научить компьютерного персонажа стрелять?
Содержание урока:
1. Введение;
2. Стрельба в одном направлении;
3. Использование переменной для стрельбы в разных направлениях;
4. Создание паузы между выстрелами;
5. Уничтожение пули, когда она пропадает из вида.
ВВЕДЕНИЕ
Вопрос "Как научить компьютерного персонажа стрелять?" часто задается на различных форумах! Данный урок предназначен именно для тех кто еще не знает как это делается или тех, кому нужна дополнительная информация.

Снаряд или пуля это некий объект, созданный в определенном месте, запрограммированный на движение в нужном направлении и уничтожающий другой объект, с которым он сталкивается.

Если Ваши пули должны на протяжении всей игры перемещаться только в одном направлении, например как в играх стиля "Space Invader", тогда все достаточно просто, но вот когда встает вопрос о перемещении пуль в различых направлениях - тогда реализация данной системы несколько усложняется.

Направление движения любого объекта расчитывается по сторонам света (для примера можно использовать компас). В дальнейшем рекомендуем использовать предлогаемую схему при выборе направления полета ваших пуль (снарядов).


Перед тем как приступить непосредственно к прочтению и реализации урока, предлогаем Вам запустить Game Maker (мы используем версию 4.2a) и создать все необходимое, а именно:

# Добавить спрайт главного игрового персонажа;
# Добавить спрайт пули;
# Создать объект главного игрового персонажа;
# Создать объект пули;
# Создать комнату и добавить в нее объект главного игрового персонажа.

Все это рекомендуем сделать заблаговременно, чтобы потом уже не отвлекаться на подобные 'мелочи'.
СТРЕЛЬБА В ОДНОМ НАПРАВЛЕНИИ
В самом начале урока (в соответствии с компасом) выбираем направление для полета нашей пули.

В событии CREATE объекта вашей пули поместим действие 'Set direction and speed of motion' - это такая иконка (с синими стрелками, торчащими в разные стороны) и затем укажем желаемое направление полета пули, введя соответствующую цифру в окошке 'direction', после чего укажем скорость с которой наша пуля должна перемещаться - введя соответствующую цифру в поле 'speed', в окошке RELATIVE галочку ставить не нужно.

Теперь в объекте главного игрового персонажа в событии выстрела (в нашем случае это клавиша 'Space') поместим действие 'Create an instance of an object' - иконка (светящаяся лампочка) которая находится во вкладке OBJECTS - выбираем спрайт пули и устанавливаем координаты создания пули X=0, Y=0 при этом пуля будет создана в верхнем левом углу комнаты. Чтобы образец пули был создан рядом со спрайтом главного героя необходимо в поле RELATIVE поставить галочку, если Вы забыли ее поставить, то вернитетесь и сделайте это.

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

Для того чтобы исправить это недоразумение, мы должны подправить X и Y координаты в действии 'Create an instance of an object'.

Для этого нам необходимо выяснить высоту и ширину спрайта главного игрового персонажа - данная информация позволит легко и просто создать нашу пулю в нужном месте.

Пример:

Если Ваш игровой персонаж всегда смотрит лицом вперед и стреляет вверх/вниз, габариты спрайта игрового персонажа - 20, а ширина спрайта пули - 6, то разделите пополам ширину спрайта игрового персонажа, чтобы вычислить его центр, в нашем случае это 10, а половина ширины пули - 3. Далее из половины ширины спрайта главного героя вычитаем половину ширины пули 10-3=7, затем изменяем значение координаты X на 7 чтобы отцентровать выстрел пули..., при этом по оси Y наша пуля все еще продолжает накладываться на изображение героя, чтобы исправить и это недоразумение нам снова нужно вычислить высоту спрайта пули и затем установить для оси Y отричательное значение высоты спрайта пули, у нас должна получиться слудующая расстановка...

X = 7 Y = -6

Теперь пуля должна быть создана правильно без смещений.
ИСПОЛЬЗОВАНИЕ ПЕРЕМЕННОЙ ДЛЯ СТРЕЛЬБЫ В РАЗНЫХ НАПРАВЛЕНИЯХ
Для установки направления пули, также может быть использована переменная, в данном случае, для установки направления пули, мы будем использовать переменную IMAGE_SINGLE.

IMAGE_SINGLE - команда, которая в спрайте состоящем из нескольких изображений (фреймов), использует фрейм с определенным индексом.

Создаем спрайт для главного игрового персонажа в котором он расположен (смотрит) во всех 4 направлениях (вверх, вниз, влево и направо).

ОБРАТИТЕ ВНИМАНИЕ: Если Вы хотите чтобы Ваш игровой персонаж был анимированный, тогда придется использовать 4 мульти-фреймных (анимированных) спрайта, вместо одного спрайта с 4 персонажами развернутыми (смотрящими) в разные стороны. Рассматриваемая ниже методика не будет работать, при использовании более чем одного спрайта.

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

В событиях для клавиш направлений нашего игрового персонажа (для каждой клавиши) добавляем иконку 'X=2' которая находится в списке действий во вложении CODE и помещаем в поле 'variable' переменную 'image_single', значение (new value) будет различное в зависимости от выбранной клавиши...

Клавиша | Значение
------------------------------
UP | 0
RIGHT | 1
DOWN | 2
LEFT | 3

Как и раньше в событии выстрела (клавиша 'Space') добавляем действие 'Create instance' (светящаяся лампочка).

Теперь в событии CREATE объекта пули нужно поместить приведенный ниже сценарий, копируем весь текст находящийся между словами --- врезка ---

------------------------------ врезка -----------------------------
{
if (player.image_single = 0)
{
x = player.x+player.sprite_width/2-[ПШП];
y = player.y-[ВП];
direction = 90;
}
if (player.image_single = 1)
{
x = player.x+player.sprite_width;
y = player.y+player.sprite_height/2-[ПВП];
direction = 0;
}
if (player.image_single = 2)
{
x = player.x+player.sprite_width/2-[ПШП];
y = y+player.sprite_height;
direction = 270;
}
if (player.image_single = 3)
{
x = player.x-[ШП];
y = player.y+player.sprite_height/2-[ПВП];
direction = 180;
}
speed = 2
}
---------------------------- врезка ---------------------------

В данном коде необходимо внести некоторые изменения, а именно в позиции [], для этого воспользуемся обозначениями указанными ниже...

[ШП] = Ширина Пули
[ВП] = Высота Пули
[ПШП] = Половина Ширины пули
[ПВП] = Половина Высоты Пули

Когда Вы будете добавлять ваши значения, НЕ используйте скобки [], только указывайте цифру.

Теперь давайте более подробно рассмотрим небольшой фрагмент сценария...

if (player.image_single=0)
{
x = player.x+player.sprite_width/2-[ПШП];
y = player.y-[ВП];
direction=90;
}

Взглянем на первую строку сценария, эта часть проверяет условие истинности (TRUE), в данной строке проверяется является ли переменная image_single объекта player равной 0, если проверяемая часть равна (equal) 0, в таком случае сее означает что выражение ИСТИННО и тогда выполняется сценарий заключенный в круглые {} скобки, если проверяемое выражение не истинно, то данный кусок кода пропускается и проверяется следующую его часть.

Предположим что рассмотренная часть истинна и проверяем следующую часть сценария заключенного в круглые {} скобки.

x = player.x+player.sprite_width/2-[ПШП];
y = player.y-[ВП];
direction = 90;

Первая строка кода изменяет ось Х объекта player, исполняемый код является не очень комплексным уравнением, зато позволяет получить более близкие значения...

ОБРАТИТЕ ВНИМАНИЕ: я заменил [ПШП] значением половины ширины пули

player.x+player.sprite_width/2-3;

"player.x" - Возвращает значение оси Х для объекта player
"player.sprite_width/2-3" - Возвращает ширину спрайта для объекта главного
героя, затем делит её на 2, после чего вычитает 3.

ОК с первой строкой разобрались..., теперь давайте рассмотрим следующее уравнение...

ОБРАТИТЕ ВНИМАНИЕ: я заменил [ВП] значением высоты пули

y = player.y-6;

"player.y-6" - Возвращает значение оси Y для объекта player после чего вычитаем 6.

Причина по которой мы использовали переменные подобные player.x связаны с тем, что мы не можем использовать фиксированное число, так как ось X и Y игрового персонажа изменяется, когда главный герой перемещается по комнате/уровню. Если бы мы использовали фиксированные числа подобно указанным ниже...

x = 100+12-3;
y = 100-6;

это сделало бы ось X и Y пули (потому что объект запускается из сценария) всегда равной 'X=103 и Y=94 ' (значение уравнений).

Оставшиеся части изучаемого сценария несколько отличаются друг от друга, но тем не менее все они используют одни и те же 'правила поведения', а последняя строка сценария "speed=2" устанавливает скорость, с которой наша пуля перемещается, увеличивая данное значение мы увеличим скорость.
СОЗДАНИЕ ПАУЗЫ МЕЖДУ ВЫСТРЕЛАМИ
Оба примера в данном уроке вызывают эффект 'быстрого огня', но это можно исправить, используя СИГНАЛЬНОЕ событие и изменив действие в клавише 'огня' на данный сценарий.

---------------------- врезка ---------------------
{
if (canshoot=1)
{
instance_create(x, y, bullet);
alarm[0]=room_speed/2;
canshoot=0;
}
}
--------------------- врезка -----------------------

Данный сценарий проверяет, является ли переменная canshoot=1 и если данное равенство ИСТИННО, то в объекте главного героя в его позиции по оси X, Y, создается пуля, устанавливая ALARM 0 в половину скорости комнаты, изменяя затем переменную canshoot на 0. Это означает, что когда Вы нажимаете клавишу огонь в следующий раз, то пуля создана не будет, так как при проверке будет возвращено значение ЛОЖНО, в связи с тем что значение canshoot не равно 1.

Для этого в событии ALARM 0 объекта главного героя помещаем иконку действия X=2 со следующими установками...

variable = canshoot
new value = 1

Вместо указания числа, при установке значения для ALARM 0 в коде для клавиши 'огня', мы используем значение 'room_speed/2', при этом пуля будет создаваться каждые пол секунды, потому что значение room_speed всегда равно 1 секунде реального времени. Используя такую вещь как значение скорости комнаты, мы добиваемся эффекта создания промежутков между появлением каждой последующей пули.

В заключении мы должны присвоить для переменной canshoot стартовое значение, иначе при использовании вышеприведенного сценария мы получим ошибку, для этого в событии CREATE объекта игрового персонажа добавляем действие X=2 с такими же установками, какие мы использовали в событии ALARM 0.
УНИЧТОЖЕНИЕ ПУЛИ, КОГДА ОНА ПРОПАДАЕТ ИЗ ВИДА
Единственную вещь которую не стоит забыть выполнить, это уничтожить пули улетающие за границы комнаты. Это очень просто сделать - используя действие 'Destroy the instance' (иконка с мусорным баком), поместив ее в событии OUTSIDE бъекта пули.

Примеры, рассмотренные в данном уроке - это лишь небольшая часть из множества доступных и возможных способов, позволяющих научить Вашего игрового персонажа стрелять. Поскольку каждый человек кодирует те или иные вещи по-своему и создает при этом совершенно разнообразные игры, то будет лучше, если Вы заранее продумаете как конкретно Вы хотите реализовать возможность стрельбы в своей игре, например, если Вы собираетесь использовать различные типы боеприпасов/пуль тогда способ, которым Вы позволите вашим игровым персонажам стрелять, будет различен.

Замена спрайта при изменении направления его движения
В данном уроке мы рассмотрим простой способ, замены спрайта объекта в зависимости от смены направления его движения.

В событии шага (STEP) вашего объекта, поместите действие "If an expression is true" (это иконка со значком Вопроса - найти ее можно во вкладке Question) и в текстовом окне "Expression" укажите выражение: "direction>=45". За ним, поместите следующее действие "If" с инструкцией: "direction<=135". Далее, поместите действие "Change the sprite" и установите для него спрайт смотрящий "вверх".

Далее, поместите действие "If" содержащее выражение: "direction>135" и другое действия "If": "direction<=225". В действии замены спрайта объекта, выберите спрайт с направлением персонажа "влево".

Повторяем предыдущие телодвижения, помещаем инструкцию "If" содержащую: "direction>225" и "direction<=315" и заменяем спрайт на направленный "вниз".

И наконец, последняя инструкция "If": "direction > 315 || direction <45" и меняем спрайт на смотрящий "вправо". Это означает, когда 315 < направление <= 360 или 0 <= направление < 45, появится спрайт направленный вправо.

Предлагаемый вариант действий может оказаться очень полезным, например если Вы в своей игре захотите сделать так, чтобы враги следовали за главным игровым персонажем по всей комнате. Я сделал игру, основанную преимущественно на этом методе, Вы можете увидеть ее заглянув по адресу: http://www.geocities.com/lightspeedfreeware и скачав игру "Bounty Hunter".

Вы можете поэкспериментировать с направлениями, только помните, что выбор направления основывается на круге (360 градусов), крайняя правая точка которого тождественна 0. Вы должны все изменяющиеся направления, сохранить в памяти.

Надеюсь, что представленная информация окажется Вам полезной.

ЗАМЕЧАНИЕ ! Каждую операцию по замене спрайта с действием "Change the sprite" рекомендую окружить блоками "Start Block" и "End Block".

Делаем инвентарь для игры
Сколько раз вы воспламенялись идеей создать шедевр в стиле fallout или какой-нибудь другой навороченной РПГ и останавливали себя по причине недостаточной квалификации? Как правило, эта "недостаточность" выражалась в неспособности прописать код инвентаря. Сами понимаете, этот элемент является неотъемлемой частью любой хорошей ролевой игры и уж тем более, квеста. Именно поэтому темой моего первого урока будет "Инвентарь".
С этой проблемой я столкнулся давным-давно, только начав работу по созданию "Юпитера 516". Конечно, изобретать заново велосипед никому не хочется, поэтому первой идеей, пришедшей мне в голову, было найти примеры, посвященные этой теме, в сети. Двое суток, проведенных во всемирной паутине, не принесли никаких результатов. Таких примеров просто не было. Ну что ж, придется опять напрягать извилины, подумал я и засучив рукава, приступил к делу. Если говорить честно, толком ничего не выходило, да еще и время до обещанного релиза поджимало, одним словом, получилось не совсем то, что хотелось бы.
Произведенный инвентарь представлял собой несколько разноплановых ячеек. О его скудном потенциале я указал в readme файле:
"Одна из его ячеек выделена под спец. возможности, переключаемые левой кнопкой мыши, в другие можно уместить не более: одной брони, одного оружия, одного не вживленного имплантанта , ста препаратов одного вида."
Как видно из выше изложенного, инвентарь имел массу ограничений. К примеру, кто будет довольствоваться одной пушкой? В одних ситуациях полезно иметь гранатомет, в других пистолет с глушителем...
Спустя полтора года мне захотелось вновь испытать свои силы и вот что вышло...
Прежде чем перейти к написанию кода, необходимо дать четкое определение инвентарю, позволяющее понять принцип его работы. В первую очередь Инвентарь - это группа ячеек, а потом уже и все остальное! И так, создаем наш первый объект и называем его oI (старайтесь давать названия покороче т.к. в коде вам еще не раз предстоит ссылаться на них). Объекту присваиваем спрайт и продолжаем размышлять... Решите для себя сразу, из скольких клеток (ячеек) будет состоять ваш инвентарь. Для примера нам хватит трех. Здесь следует отметить, что все три будут являться разными интерпретациями созданного раннее обькта oI.
На карте должно быть три oI с разными значениями v (вид предмета, находящегося в конкретной ячейке) и vv (количество предметов). Как все это можно осуществить? Ответ прост - надо воспользоваться "опережающим объектом". Пусть им станет s (не забудьте найти для него место на карте). В событие создания (Create) объекта s печатаем такой код:
I=instance_create(x,y,oI)
II=instance_create(x+40,y,oI)
III=instance_create(x+80,y,oI)
//Как видите, наши объекты разделены, и имеют разные имена.
Вводим первоначальные характеристики главного персонажа (того, кто использует предметы):
global.n1=50 //сила
global.n2=200 //ловкость
global.n3=8 //мудрость
Теперь мы имеем в своем распоряжении несколько свободных ячеек и характеристики героя, а значит, уже можем приступать непосредственно к разработке вещей (предметов) для нашего инвентаря.
Выделять под каждую вещь объект - работа чересчур тяжкая, поэтому мы создадим один общий.
Пускай зовется v123. Повторяем операцию с "опережающим объектом". В событие создания (Create) объекта s впечатываем:
v=instance_create(112,31,v123) // координаты могут быть любыми.
v.vvv=1 // вещь 1 типа
v=instance_create(112,45,v123)
v.vvv=1 // вещь 1 типа
v=instance_create(142,31,v123)
v.vvv=2 // вещь 2 типа
v=instance_create(152,31,v123)
v.vvv=3 // вещь 3 типа
Ну вот, другое дело. Далее переключаемся на событие отпускания левой кнопки мыши (Left Released) объекта v123 и вставляем туда:
if s.I.v=vvv{s.I.vv+=1;instance_destroy();exit}
if s.II.v=vvv{s.II.vv+=1;instance_destroy();exit}
if s.III.v=vvv{s.III.vv+=1;instance_destroy();exit}
// Если в инвентаре уже имеется вещь данного вида, то увеличивается
// количество предметов.
if s.I.v!=0 && s.II.v!=0 && s.III.v!=0
{show_message('Инвентарь заполнен!');exit}
// Если свободного места вдруг не обнаружится, выводим сообщение
// "Инвентарь заполнен!"
if s.I.v=0{s.I.vv=1;s.I.v=vvv;instance_destroy();exit}
if s.II.v=0{s.II.vv=1;s.II.v=vvv;instance_destroy();exit}
if s.III.v=0{s.III.vv=1;s.III.v=vvv;instance_destroy();exit}
//Для надежности второй раз проверяем условие не занятости клеток
//Обозначаем вид предмета и увеличиваем его количество до 1 шт.
Вернемся к oI. В событие рисования (draw) чиркнем:
draw_sprite(s0,0,x,y) //спрайт клетки
if vv>0
{
if v=1{draw_sprite(s1,-1,x,y)} //если вещь 1 типа, рисуем соответствующий спрайт
if v=2{draw_sprite(s2,-1,x,y)} //если вещь 2 типа, рисуем соответствующий спрайт
if v=3{draw_sprite(s3,-1,x,y)} //если вещь 3 типа, рисуем соответствующий спрайт
if vv>1 {draw_text(x+19,y+20,string(vv))}
//если количество вещичек одного вида больше единицы, отображаем значение vv.
}
else{v=0}
Осталось только разобрать использование приобретенных вещей. Что по-вашему, происходит когда вы одеваете на главного персонажа броню? Во-первых, изменяется часть характеристик героя. Во-вторых, активированный предмет (в нашем случае броня) каким-либо образом выделяется или исчезает, превращаясь в крупное изображение. Стало быть и нам как-то нужно выделить используемую вещь. По аналогии с oI создаем объект oV (клавиша "использовать"). При нажатиии на нее левой кнопкой мыши (Left Released) должно происходить следующее:
//активацию предмета можно показывать разными способами, в этом уроке
// ограничимся появлением у задействованной вещи рамки. Объект ac1 для
//этого дела как раз сгодится.
if instance_number(ac1)>0{with(ac1){instance_destroy()}}
//если количество "рамок" на карте больше 0, удаляем их к черту, во избежании
// активации сразу нескольких предметов.
ni=instance_create(x,y-40,ac1)
//создаем рамку у выбранного предмета.
on=instance_nearest(x+5,y-5,oI)
//определяем самую ближнюю клетку(oI) и даем ей кодовое имя on,
// связывая таким образом кнопку "использовать"(oV) с находящейся выше ячейкой.
if on.v=1
//Если в ближайшей ячейке находится вещь 1 типа, влияние на характеристики будет таким:
{
ni.no1=-5 //сила-5
ni.no2=234 //ловкость+234
ni.no3=1 //мудрость+1
}
if on.v=2//изменение показателей для вещи 2 типа
{
ni.no1=26
ni.no2=-26
ni.no3=26
}
if on.v=3//изменение показателей для вещи 3 типа
{
ni.no1=9
ni.no2=0
ni.no3=0
}
В событие создания (Create) рамки(ac1):
global.n1+=no1
global.n2+=no2
global.n3+=no3
//изменяет характеристики г. персонажа.
А в событие ее уничтожения (Destroy):
global.n1-=no1
global.n2-=no2
global.n3-=no3
//возвращает все на круги своя.
Ну вот пожалуй и все.
Надеюсь, что изложенные мною выкладки вам пригодятся.

Сценарии (Scripts)
Когда Вы создаете сценарий, то хотите иметь доступ в пройденным (passed) параметрам из него (или при использовании действия сценария, или при вызове сценария в качестве функции из программы (или из другой, или даже того же самого сценария). Эти параметры сохраняются в переменных argument0, argument1, …, argument9. Таким образом могут быть определены максимум 10 параметров. (Обратите внимание, что при вызове сценария из действия, определены могут быть только первые 3 параметра).
Сценарии также могут возвращать значения, так чтобы они могли быть использованы в выражениях. Для этого Вы используете инструкцию возврата (return):
return <выражение>
Выполнение сценария заканчивается оператором возврата (return)!
Пример
Вот определение для небольшого сценария, который вычисляет квадрат параметра:
{
return (argument0*argument0);
}
Для вызова сценария изнутри части кода, следует действовать точно также, как и при вызове функций. То есть, написать название сценария со значениями параметра (argument values) в круглых скобках.

Просмотров: 45882 | Добавил: Asike | Рейтинг: 3.7/6
Всего комментариев: 101 2 »
10 четкий пацан  
0
я могу делать стрельбу мышкой

9 programming  
0
вот сыллка того что я добавил на сайт толька для pro:http://www.yoyogames.com/make

8 programming  
0
вот мой код:Information about object: obj_player

Sprite: spr_player
Solid: false
Visible: true
Depth: 100
Persistent: false
Parent: <no parent>
Mask: <same as sprite>

Create Event:
execute code:

{
global.camx = x;
global.camy = y;
global.camsin = sin(direction*pi/180);
global.camcos = cos(direction*pi/180);
}
execute code:

{
friction = 0.2;

// initialize 3D
d3d_start();
d3d_set_hidden(true);
d3d_set_lighting(false);
d3d_set_culling(false);
d3d_set_fog(true,c_black,10,300);
// interpolate textures
texture_set_interpolation(true);
}
set the health to 100
stop sound snd_ow

End Step Event:
execute code:

{
global.camx = x;
global.camy = y;
global.camsin = sin(direction*pi/180);
global.camcos = cos(direction*pi/180);
}

Collision Event with object obj_wall_basic:
execute code:

{
x = xprevious;
y = yprevious;
if (abs(hspeed) >= abs(vspeed) && not place_meeting(x+hspeed,y,obj_wall_basic))
{ x += hspeed; exit;}
if (abs(vspeed) >= abs(hspeed) && not place_meeting(x,y+vspeed,obj_wall_basic))
{ y += vspeed; exit;}
speed = 0;
}

Keyboard Event for <Left> Key:
execute code:

{
direction += 3;
}

Keyboard Event for <Up> Key:
execute code:

{
var maxspeed;
if keyboard_check(vk_shift) maxspeed = 3 else maxspeed = 1.5;
if (speed < maxspeed ) speed = min(maxspeed ,speed+0.4);
}

Keyboard Event for <Right> Key:
execute code:

{
direction -= 3;
}

Keyboard Event for <Down> Key:
execute code:

{
var maxspeed;
if keyboard_check(vk_shift) maxspeed = 3 else maxspeed = 1.5;
if (speed > -maxspeed) speed = max(-maxspeed,speed-0.4);
}

Keyboard Event for X-key Key:
execute code:

{
var xn,yn;
xn = x + sin(direction*pi/180);
yn = y + cos(direction*pi/180);
if not place_meeting(xn,yn,obj_wall_basic)
{ x = xn; y = yn; }
}

Keyboard Event for Z-key Key:
execute code:

{
var xn,yn;
xn = x - sin(direction*pi/180);
yn = y - cos(direction*pi/180);
if not place_meeting(xn,yn,obj_wall_basic)
{ x = xn; y = yn; }
}

Other Event: No More Health:
display message: YOU ARE DEAD!!!!
restart the game

Draw Event:
execute code:

{
// set the projection
d3d_set_projection(x,y,10, x+cos(direction*pi/180),y-sin(direction*pi/180),10, 0,0,1);
// set color and transparency
draw_set_alpha(1);
draw_set_color(c_white);
// draw floor and ceiling
d3d_draw_floor(0,0,0,room_width,room_height,0,
background_get_texture(texture_floor),32,32);
d3d_draw_floor(0,0,32,room_width,room_height,32,
background_get_texture(texture_ceiling),24,24);
}


7 programming  
0
я занимаюсь программированием и сделал пули.Мне кажется 3д игра лучше!

6 FWEIZER  
0
хорошая штука! кто писал молодец!

1-5 6-10
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Поиск

Календарь

«  Сентябрь 2007  »
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
24252627282930