BlitzJavaScript (Добавлена физика Box2D)
| |
Xakep | Дата: Пятница, 06 Января 2012, 19:53 | Сообщение # 21 |
めちゃくちゃちゃ
Сейчас нет на сайте
| Quote (05142) JIT вроде бы, но я не уверен не, Java является JIT компилятором, но JIT это не код, а разновидность компиляторов, в переводе Just-in-time, выполняет на лету.
технология увеличения производительности программных систем, использующих байт-код, путём компиляции байт-кода в машинный код непосредственно во время работы программы. Таким образом достигается высокая скорость выполнения по сравнению с интерпретируемым байткодом[1] (сравнимая с компилируемыми языками) за счёт увеличения потребления памяти (для хранения результатов компиляции) и затрат времени на компиляцию. JIT базируется на двух более ранних идеях, касающихся среды исполнения: компиляции байт-кода и динамической компиляции. источник википедия
по этой технологии работает 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 |
めちゃくちゃちゃ
Сейчас нет на сайте
| ну это уже на твое усмотрение если тебе больше нравится 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 одинаковых спрайтов? (как в демо)
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 |
почётный гцупер
Сейчас нет на сайте
| А это уже не ява скрипт пошёл
|
|
| |
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 |
старожил
Сейчас нет на сайте
| Не очень...
|
|
| |
|