| 
	
		
		
			| 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 |  |   старожил Сейчас нет на сайте | Не очень... |  |  |  |  |  
 |