Вторник, 19 Марта 2024, 11:23

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Форум игроделов » Ваши проекты » Проекты в разработке » [2D] - AzEngine (2D Game Engine)
[2D] - AzEngine
AikidosДата: Среда, 18 Января 2012, 22:42 | Сообщение # 21
постоянный участник
Сейчас нет на сайте
Quote (Mkasss)
Клас , удачи в разработке

Спасибо.

Quote (TimKruz)
"насколько проще использовать этот движок, чем OpenGL напрямую".

Это вопрос? smile Я туго соображаю сегодня. Весь день почти его кодил.


Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.
yarickyarickДата: Четверг, 19 Января 2012, 01:08 | Сообщение # 22
Маленький лицемер
Сейчас нет на сайте
Aikidos, Тоже писал что-то подобное на C#
Сейчас время от времени использую сам=)
pro100denverДата: Четверг, 19 Января 2012, 03:24 | Сообщение # 23
участник
Сейчас нет на сайте
браво!
Жаль конечно что нет LUA, ибо таким людям как геймдизайнеры LUA ооочень помогает.




Мой блог.DENVER
AikidosДата: Четверг, 19 Января 2012, 15:47 | Сообщение # 24
постоянный участник
Сейчас нет на сайте
Quote (pro100denver)
браво!

Спасибо.

Как и обещал. Сегодня я расскажу пример скриптования объектов и использование альфа канала.

Задача: сделать объект, который постепенно становится прозрачным и когда он станет совсем прозрачным - мы завершаем игру.

Для начала мы откроем наш главный скрипт (пока он называется "main.as") и напишем следующий скрипт:
Code
void Init()
{
   Game.SetClearColor(0, 0, 0); // Установим цвет очистки экрана на черный
     
   GameObject @object = ObjectManager.Create("AZ"); // Создаём объект с именем AZ
   object.LoadImage("az.png"); // Загружаем изображение для данного объекта
   object.SetPosition((Game.GetWindowWidth() / 2) - (object.GetImageWidth() / 2),
    (Game.GetWindowHeight() / 2) - (object.GetImageHeight() / 2)); // Устанавливаем объект в центр окна
     
   Script.AddScriptToObject("AZ", "object.as"); // Загружаем скрипт для нашего объекта
}

void Update()
{
   if (ObjectManager.Get("AZ") == null) Game.Exit(); // Проверяем наличие объекта. Если его не существует, то завершаем работу игры.
}


Теперь напишем скрипт самого объекта:
Code
void Init()
{
     
}

void Update()
{
   GameObject @object = ObjectManager.Get("AZ"); // Получаем наш объект из менеджера объектов
     
   if (object != null)   
   {
     float alpha = object.GetImageAlpha(); // Узнаём текущее значение альфа канала (1.0 - полностью не прозрачен, 0 - полностью прозрачен)
     if (alpha > 0)
      object.SetImageAlpha(alpha - 0.01); // Если текущее значение больше нуля, то делаем слегка прозрачным
     else
      ObjectManager.Delete("AZ"); // Если объект стал полностью прозрачным, то удаляем его
   }
}


Скрины, думаю, кидать особо нет смысла. Всё и так понятно, что произойдет. Вот вроде и всё. Тут видна работа объектов. Будет интересно выслушать ваше мнение по улучшению этого механизма.
Кстати, перед мной встала задача сделать работу очередности прорисовки объектов. Друг предложил сделать как в GM'e (глубину). Что вы думаете по этому поводу?


Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.

Сообщение отредактировал Aikidos - Четверг, 19 Января 2012, 15:48
DemeronДата: Четверг, 19 Января 2012, 16:14 | Сообщение # 25
User created in C++
Сейчас нет на сайте
Quote (Aikidos)
Друг предложил сделать как в GM'e (глубину). Что вы думаете по этому поводу?

Берешь и в игре рисуешь сначала дальние объекты, а потом те что ближе, вот и всё. А глубина будет только тормозить. Хотя можно сделать выбор.
AikidosДата: Четверг, 19 Января 2012, 16:17 | Сообщение # 26
постоянный участник
Сейчас нет на сайте
Quote (Demeron)
Берешь и в игре рисуешь сначала дальние объекты, а потом те что ближе, вот и всё. А глубина будет только тормозить. Хотя можно сделать выбор.

Сейчас они рисуются в порядке создания. Т.е. те, которые были созданы раньше рисуются первее.


Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.
zodiakДата: Четверг, 19 Января 2012, 16:35 | Сообщение # 27
постоянный участник
Сейчас нет на сайте
Глубина, или слои нужны. Без вариантов. Зачем пользователю напрягаться еще и с порядком отрисовки. Назначил один слой для земли, второй для расительности и можно быть уверенным, что тайл земли никогда не будет поверх дерева.
Quote (Demeron)
А глубина будет только тормозить.

Интересно, чему там тормозить. Ну придется перед выводом отсортировать все спрайты, что с того. На сортировку 10000 объектов уйдет 5-10 микросекунд в кадр. Это ничто, по сравнению с тем, что может наворотить пользователь.


Точка зору окремо взятого індивіда завжди суб'єктивна!

Взломщик
Battle City.Net
AikidosДата: Четверг, 19 Января 2012, 16:37 | Сообщение # 28
постоянный участник
Сейчас нет на сайте
Quote (zodiak)
Глубина, или слои нужны. Без вариантов. Зачем пользователю напрягаться еще и с порядком отрисовки. Назначил один слой для земли, второй для расительности и можно быть уверенным, что тайл земли никогда не будет поверх дерева.

Я и не спорил с этим. Это конечно нужно.

Quote (zodiak)
Интересно, чему там тормозить. Ну придется перед выводом отсортировать все спрайты, что с того. На сортировку 10000 объектов уйдет 5-10 микросекунд в кадр. Это ничто, по сравнению с тем, что может наворотить пользователь.

Тормозить не будет. Просто было интересно узнать ваше мнение. Мало ли кого прямо бесит глубина и есть другие, более интересные, варианты. Я GM'ом не пользовался sad


Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.
DemeronДата: Четверг, 19 Января 2012, 18:33 | Сообщение # 29
User created in C++
Сейчас нет на сайте
Quote (zodiak)
Интересно, чему там тормозить. Ну придется перед выводом отсортировать все спрайты, что с того. На сортировку 10000 объектов уйдет 5-10 микросекунд в кадр. Это ничто, по сравнению с тем, что может наворотить пользователь.

Ну если много мелких спрайтов, то это, думаю, не выгодно будет. Тем более я думаю что времени больше потратиться... Хотя... Может вы и правы =)
AGENTX001Дата: Четверг, 19 Января 2012, 21:33 | Сообщение # 30
почётный гцупер
Сейчас нет на сайте
Aikidos, по поводу глубины, нужно не меньше 1к слоёв + возможность менять глубину в процессе игры. (нужно для изометрии). Работа с объектами - молодец. Очень не хватает в многих двигах.
AikidosДата: Четверг, 19 Января 2012, 21:43 | Сообщение # 31
постоянный участник
Сейчас нет на сайте
Quote (AGENTX001)
Aikidos, по поводу глубины, нужно не меньше 1к слоёв + возможность менять глубину в процессе игры.

Да, так и хотел сделать. Значит выбор сделан. Спасибо всем за поддержку и советы.


Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.
AGENTX001Дата: Четверг, 19 Января 2012, 22:11 | Сообщение # 32
почётный гцупер
Сейчас нет на сайте
Quote (Aikidos)
Спасибо всем за поддержку и советы.

НЗ
Aikidos, ждём возможности полапать!)
AikidosДата: Пятница, 20 Января 2012, 12:22 | Сообщение # 33
постоянный участник
Сейчас нет на сайте
Почти доделал контроллер клавиатуры. Решил привести пример его работы и заодно показать его особенности.

Для начала напишем следующий главный скрипт:

Code
void Init()
{  
  GameObject @pRedBox = ObjectManager.Create("RedBox"); // Создаём красный квадрат
  pRedBox.LoadImage("box_red.png");
  pRedBox.SetPosition(200, 300);
  Script.AddScriptToObject("RedBox", "box_red.as");
   
  GameObject @pGreenBox = ObjectManager.Create("GreenBox"); // Создаём зелёный квадрат
  pGreenBox.LoadImage("box_green.png");
  pGreenBox.SetPosition(700, 300);
  Script.AddScriptToObject("GreenBox", "box_green.as");
}

void Update()
{

}


Вот что у нас получилось:


Как мы видим из главного скрипта - мы загружаем для каждого объекта скрипты ("box_red.as" и "box_green.as"). Вот их код:

box_red.as ->
Code
void Init()
{
  KbController.Connect(KB_KEY_D, "void Move()", KB_CONNECT_TYPE_UP); // Создаём коннект для клавиши D, указываем имя функции, которая должна выполняться и тип коннекта
}

void Update()
{

}

void Move()
{
  ObjectManager.Get("RedBox").SetPosition(440, 300); // Перемещаем наш объекта
}


box_green.as ->
Code
void Init()
{
  KbController.Connect(KB_KEY_D, "void Move()", KB_CONNECT_TYPE_UP); // Устанавливаем такой же коннект как и для красного квадрата
}

void Update()
{

}

void Move()
{
  ObjectManager.Get("GreenBox").SetPosition(500, 300); // Так же перемещаем объект
}


Теперь, если мы запустим игру и нажмём клавишу "D", то увидим следующий результат:


Из указанного примера видно, что для каждого объекта игры можно устанавливать свои коннекты для контроллера.
Буду рад выслушать ваше мнение.


Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.
AGENTX001Дата: Пятница, 20 Января 2012, 20:14 | Сообщение # 34
почётный гцупер
Сейчас нет на сайте
Aikidos, а зачем такой непонятный код sad Чё не
Code

void Update()  
  {  
      if KbController.Press(KB_KEY_D)
      {
           ObjectManager.Get("GreenBox").SetPosition(500, 300);
      }
  }

Почему
Code

ObjectManager.Get("GreenBox").SetPosition(500, 300);

а не
Code

obj = ObjectManager.Get("GreenBox");
obj.x += 3;

И вообще както стрёмно у тебя всё...
AikidosДата: Пятница, 20 Января 2012, 21:06 | Сообщение # 35
постоянный участник
Сейчас нет на сайте
Quote (AGENTX001)
void Update()
{
if KbController.Press(KB_KEY_D)
{
ObjectManager.Get("GreenBox").SetPosition(500, 300);
}
}


можно писать
Code
if(KbController.IsPressed(KB_KEY_D))
{   
       ObjectManager.Get("GreenBox").SetPosition(500, 300);   
}


Quote (AGENTX001)
obj = ObjectManager.Get("GreenBox");
obj.x += 3;

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

Добавлено (20.01.2012, 21:06)
---------------------------------------------
Да и из всех двигов, которых я видел, ни один не предоставлял открытое изменение позиции объекта (двиги под C# не считаются).


Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.

Сообщение отредактировал Aikidos - Пятница, 20 Января 2012, 21:07
AGENTX001Дата: Пятница, 20 Января 2012, 22:13 | Сообщение # 36
почётный гцупер
Сейчас нет на сайте
Quote (Aikidos)
Да и из всех двигов, которых я видел, ни один не предоставлял открытое изменение позиции объекта

Да,но у многих есть фишки типа setDirection и setSpeed. Это очень упрощает део))
Quote (Aikidos)
if(KbController.IsPressed(KB_KEY_D)) {          ObjectManager.Get("GreenBox").SetPosition(500, 300);    }

Так лучше))
Да, кстате:
Code
pGreenBox.LoadImage("box_green.png");

Не очень удобно, лучше както так:
Code

spr = LoadImage("box_green.png");
pGreenBox.setSprite(spr);

И ещё нужна возможность создавать несколько экземпляров объекта, и работа с каждым из них по идентификатору. Напр:
Code

   GameObject @Bot = ObjectManager.Create("objBot"); // Создаём зелёный квадрат  
   Script.AddScriptToObject("objBot", "botAI.as");
   var i;
   for i=0 to 5 { //не знаю какая у вас конструкция FOR
     bot[i] = CreateObjectInstance("objBot",random(300),random(300));//создаём 5 ботов и заносим их идентификаторы в массив.  
   }

Добавлено (20.01.2012, 22:13)
---------------------------------------------

AikidosДата: Пятница, 20 Января 2012, 22:17 | Сообщение # 37
постоянный участник
Сейчас нет на сайте
Quote (AGENTX001)
spr = LoadImage("box_green.png");
pGreenBox.setSprite(spr);

А какие это даёт плюсы?

Quote (AGENTX001)
И ещё нужна возможность создавать несколько экземпляров объекта, и работа с каждым из них по идентификатору. Напр:

Копии можно создавать.
GameObject @clone = ObjectManager.Clone("MyObject", "MyObjectClone");


Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.
AGENTX001Дата: Пятница, 20 Января 2012, 23:41 | Сообщение # 38
почётный гцупер
Сейчас нет на сайте
Quote (Aikidos)
А какие это даёт плюсы?

Ну ты прик для ста разных объектов заново грузить картинку?)
Quote (Aikidos)
GameObject @clone = ObjectManager.Clone("MyObject", "MyObjectClone");

Я говорю не про копии, а про экземпляры. Вот представь, есть объект пули, в момент выстрела, его нужно создать. И вот подумай, сколько пуль может быть на сцене в один момент? 30? 40? 90? А может даже больше... И каждую копирывать... А потом ещё и уничтожать несуществующие объекты... Тупо, очень! Я бы тебе в этом вопросе рекомендовал, глянуть на Game Maker, там с этим очень хорошо решено. Aikidos, ориентируйся на лидеров в этой облости!)
AikidosДата: Суббота, 21 Января 2012, 00:35 | Сообщение # 39
постоянный участник
Сейчас нет на сайте
Quote (AGENTX001)
Ну ты прик для ста разных объектов заново грузить картинку?)

Нет. Можно клонировать объект.

Quote (AGENTX001)
Я говорю не про копии, а про экземпляры. Вот представь, есть объект пули, в момент выстрела, его нужно создать. И вот подумай, сколько пуль может быть на сцене в один момент? 30? 40? 90? А может даже больше... И каждую копирывать... А потом ещё и уничтожать несуществующие объекты... Тупо, очень!

Не совсем понимаю, что ты имеешь ввиду. А GM не копирует объекты пуль к примеру? Как тогда там реализовано то что ты говоришь?


Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.
AirWolF_RGДата: Суббота, 21 Января 2012, 12:17 | Сообщение # 40
почетный гость
Сейчас нет на сайте
Aikidos,
Я так понял он говорит про создание экземпляров класса. Тобишь допустим ты описываешь игровой объект "пуля", а потом во время игры создаешь сколько тебе надо экземпляров такого класса. Только не совсем понятна логика AGENTX001. Такие классы надо создавать уже в своем собственном коде, а не в движке. Просто допустим в тот же класс "пуля" просто добавить элемент
Code

GameObject @pBullet = ObjectManager.Create("bullet"); // Создаём зелёный квадрат  
   pBullet.LoadImage("bullet.png");  
   pBullet.SetPosition(bx,by);  
   Script.AddScriptToObject("bullet", "bullet.as");  

в метод создания экземпляра.



Java(4),C(3),C++(4),PHP(3),BlitzMAX(5),Delphi(4),VB(4)
Оценка знаний - от 1 до 5
Форум игроделов » Ваши проекты » Проекты в разработке » [2D] - AzEngine (2D Game Engine)
  • Страница 2 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг