Четверг, 30 Мая 2024, 13:55

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
BlitzJavaScript (Добавлена физика Box2D)
XakepДата: Пятница, 06 Января 2012, 19:53 | Сообщение # 21
めちゃくちゃちゃ
Сейчас нет на сайте
Quote (05142)
JIT вроде бы, но я не уверен

не, Java является JIT компилятором, но JIT это не код, а разновидность компиляторов, в переводе Just-in-time, выполняет на лету.

технология увеличения производительности программных систем, использующих байт-код, путём компиляции байт-кода в машинный код непосредственно во время работы программы. Таким образом достигается высокая скорость выполнения по сравнению с интерпретируемым байткодом[1] (сравнимая с компилируемыми языками) за счёт увеличения потребления памяти (для хранения результатов компиляции) и затрат времени на компиляцию. JIT базируется на двух более ранних идеях, касающихся среды исполнения: компиляции байт-кода и динамической компиляции.
источник википедия smile

по этой технологии работает Java и .NET


Сообщение отредактировал Xakep - Пятница, 06 Января 2012, 19:53
05142Дата: Пятница, 06 Января 2012, 20:51 | Сообщение # 22
постоянный участник
Сейчас нет на сайте
Xakep, не знал что java это использует. Про остальное я знаю. V8 тоже JIT компилятор.

Есть вопрос: какой 3d движок использовать для этого проекта? Требования: хорошая графика, не фреймворк (мы вызываем функции движка, а не движок наши callback), загрузка ресурсов в известных форматах (например некоторые загружают только свой формат).


mecinvader
XakepДата: Пятница, 06 Января 2012, 21:14 | Сообщение # 23
めちゃくちゃちゃ
Сейчас нет на сайте
ну это уже на твое усмотрение smile если тебе больше нравится OpenGL используй OpenGL если DirectX то его. Если именно движок наверное Ogre есть и OpenGL и DirectX
05142Дата: Понедельник, 09 Января 2012, 17:40 | Сообщение # 24
постоянный участник
Сейчас нет на сайте
Наверно напишу свой 2D движок, используя SDL

Добавлено (07.01.2012, 00:06)
---------------------------------------------
Всё, кажется нашёл, буду использовать связку SDL+OpenSceneGraph+физика+аудио

Добавлено (07.01.2012, 23:42)
---------------------------------------------
Сделал функции
Run() - вызывается в основном цикле, исполняет требуемые операции в движке, рендерит кадр возвращяет false если окно закрывается пользователем или вызвано Exit().
Exit() - выход из движка (Run возвращает false)
GetKey(keycode) - нажата ли клавиша
GetKeyDown (keycode) - была ли нажата клавиша после предыдущего вызова GetKeyDown
GetKeyUp (keycode) - была ли отпущена клавиша после предыдущего вызова GetKeyUp
print (value) - выводит значение в stdout
Все приведённые выше функции вызываются через global объект "api"
Например: api.GetKeyUp(13) // 13 - Escape

И ещё одна функция: include ("filename")
она не включена в "api" и лежит в global
Возвращает результат исполнения скрипта.
Пример:

Code
// somelib.js
{
sum : function (a, b) { return a + b; },
sub : function (a, b) {return a - b; }
}

Code

//main.js

somelib = include("somelib.js");

api.print ( somelib.sum(2,2)); // 4
api.print ( somelib.sub(4,2)); // 2


Добавлено (08.01.2012, 19:24)
---------------------------------------------
После долгих поисков я решил написать свой движок. 3D я не потяну, поэтому будет 2D. Да, мне кажется 2D на этом сайте больше востребовано.

Добавлено (09.01.2012, 11:35)
---------------------------------------------
Вот пример кода последнего обновления.

Code
api.print("hello, world!");

api.init(800,600,false);

var habrI = api.newImage("habr.bmp");
var habrS = api.newSprite(habrI);

var scn = api.newScene();

scn.addSprite(habrS);

api.getRenderer().setScene(scn);

while(api.run()) {
       if (api.getInputDevice().getKey(27))api.exit();
}


Написан 2d движок. FPS при 10^4 объектах держится стабильно около 65. Притом, что все объекты на экране (объекты за экраном не рисуются). Поддерживается анимация.

Добавлено (09.01.2012, 17:40)
---------------------------------------------
Первый публичный тест


mecinvader

Сообщение отредактировал 05142 - Понедельник, 09 Января 2012, 17:40
AGENTX001Дата: Вторник, 10 Января 2012, 22:42 | Сообщение # 25
почётный гцупер
Сейчас нет на сайте
Code
var habrI = api.newImage("habr.bmp");  
  var habrS = api.newSprite(habrI);

А может эти функции лучши соединить?)
ps протестировал, amd 2 ядра по 2.6ггц, озу 3гб, видюха 512 - фпс стабилный 15
FenMixДата: Вторник, 10 Января 2012, 22:49 | Сообщение # 26
Независимый игровой журналист
Сейчас нет на сайте
Жутко нагружается видяха, кулер на моей прогоненой GTS 250 сразу набирает дофига оборотов. Для 2D это плохо.
05142Дата: Вторник, 10 Января 2012, 23:24 | Сообщение # 27
постоянный участник
Сейчас нет на сайте
FenMix, для 2d это не плохо. Какая игра держит 10000 объектов одновременно на экране? Если было бы объектов 30 (именно на экране, что за экраном не рисуются и не считаюстся), fps был бы тысячный, видео бы не грелось.

AGENTX001, эти функции объединять нет смысла. Одна загружает картинку, а вторая создаёт спрайт. А если нам надо 10 000 одинаковых спрайтов? (как в демо) smile


mecinvader
AGENTX001Дата: Вторник, 10 Января 2012, 23:53 | Сообщение # 28
почётный гцупер
Сейчас нет на сайте
Quote (05142)
AGENTX001, эти функции объединять нет смысла. Одна загружает картинку, а вторая создаёт спрайт. А если нам надо 10 000 одинаковых спрайтов? (как в демо)

А ты разве не можешь 10 000 раз добавить один и тотже спрайт?)
05142Дата: Среда, 11 Января 2012, 01:06 | Сообщение # 29
постоянный участник
Сейчас нет на сайте
AGENTX001, ну тут три пути) Либо отслеживать уже загруженные файлы, либо загружать 10 000 копий одного и того же файла в память, либо как сделал я: пусть разработчик игры сам управляет этим процессом.

mecinvader
AGENTX001Дата: Четверг, 12 Января 2012, 20:04 | Сообщение # 30
почётный гцупер
Сейчас нет на сайте
05142, как я понял двиг будет явно не прост)) Чё не сделать так:
Code

var habrS = api.newSprite("habr.bmp");  
...
for i=0 to 10 000 { scn.DrawSprite(habrS, x, y, rotate); }//точно не помню как в ЯС вызывается FOR


Так в любом нормальном двиге))
05142Дата: Четверг, 12 Января 2012, 20:20 | Сообщение # 31
постоянный участник
Сейчас нет на сайте
AGENTX001, нет, двиг будет лёгкий. Лёгкий но не в ущерб гибкости. А твоё предложение "ущемляет" гибкость. Как сказал то.

mecinvader
AGENTX001Дата: Четверг, 12 Января 2012, 21:16 | Сообщение # 32
почётный гцупер
Сейчас нет на сайте
05142,
Quote (05142)
Так в любом нормальном двиге))

всё двиги мною юзаные так робят!) windmill, dgle, dark basic.
05142Дата: Воскресенье, 05 Февраля 2012, 12:18 | Сообщение # 33
постоянный участник
Сейчас нет на сайте
Добавлен таймер. Теперь код
Code


while(api.run()) {
  sprite.move(timer.deltaTime() / 1000, 0);
}



На разных FPS будет двигать спрайт с одинаковой скоростью.

Так же теперь надо подключать библиотеку движка.

Code


api = include('lib.js');

api.init(800,600,false);

var image = new api.Image('img.bmp');

var sprite = new api.Sprite(image);

var scene = new api.Scene();

scene.addSprite(sprite);

api.getRenderer().setScene(scene);

var timer = api.getTimer();

while(api.run()) {
  sprite.move(timer.deltaTime() / 1000, 0);
}


mecinvader
AGENTX001Дата: Воскресенье, 05 Февраля 2012, 19:49 | Сообщение # 34
почётный гцупер
Сейчас нет на сайте
Quote
include('lib.js')

А это уже не ява скрипт пошёл smile
05142Дата: Понедельник, 19 Марта 2012, 17:04 | Сообщение # 35
постоянный участник
Сейчас нет на сайте
AGENTX001, это функция, реализованная движком. Так же как и api.init. Она исполняет код в указанном файле и возвращает результат исполнения кода. А результатом исполнения кода в lib.js является объект движка. Мы его присваиваем переменной api и потом работаем с ней.

Добавлено (19.03.2012, 14:19)
---------------------------------------------
Добавил функцию вращения спрайта относительно любой точки.

Code
sprite.rotate (a, x, y);


Где x, y - точка в локальной системе координат спрайта, a - угол в градусах.

Добавлено (18.03.2012, 21:02)
---------------------------------------------
Добавил базовую физику, используется Box2D.

Code
var world = api.createPhysicsWorld(0, 9.8);
var bodyDef = new api.PhysicsBody();
bodyDef.position.y = 0;
bodyDef.position.x = 2;
bodyDef.type = 1;
bodyDef.shape.x = image.getW() / 200;
bodyDef.shape.y = image.getH() / 200;
var body = world.createBody(bodyDef);

var staticDef = new api.PhysicsBody();
staticDef.position.x = 2;
staticDef.position.y = 5;
staticDef.mass = 0;
staticDef.shape.x = 10;
world.createBody(staticDef);

while(api.run()) {
   world.step(timer.deltaTime() / 10000, 6, 2);
   var pos = body.getPosition();
     
     
     
   sprite.setPosition ({
    x : (pos.x * 100) - image.getW()/2,
    y : (pos.y * 100) - image.getH()/2
   });
}


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

Добавлено (19.03.2012, 17:04)
---------------------------------------------
Обновил api физики, теперь всё проще.

Code
var world = api.createPhysicsWorld(0, 9.8, 100);

var bodyDef = new api.PhysicsDef();
bodyDef.type = 1;

sprite.setPhysics(bodyDef, world);

while(api.run()) {
  world.step(timer.deltaTime() / 1000, 6, 2);
}


Физика полностью интегрирована в спрайт, физическое тело и картинка на экране на уровне игрового скрипта - одно и то же.


mecinvader

Сообщение отредактировал 05142 - Понедельник, 19 Марта 2012, 14:19
JackNazaryanДата: Воскресенье, 28 Октября 2012, 02:14 | Сообщение # 36
старожил
Сейчас нет на сайте
Не очень...
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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