Новая версия nape. Простой пример.

govnoproger.ru > as3 > Новая версия nape. Простой пример.

Есть две версии нового nape. Первый из них debug — специально для разработки.
Второй релизовый — он меньше весит, его просто подставляем в самом конце разработки вместо дебагового.

Импорт:

 
	import flash.display.*;
	import flash.events.*;
	import flash.utils.*;
	
	import nape.util.*;
	import nape.space.*;
	import nape.phys.*;
	import nape.shape.*;
	import nape.geom.*;
	import nape.callbacks.*;
	import nape.dynamics.*;
	import nape.constraint.*;

Дальше нужно создать пространство:

var space:Space = new Space(new Vec2(0,400)); 
var debug:Debug = new BitmapDebug(550,700,0x333333);// а это для отладочной графики.

550,700 — это размеры отладочного поля.

Автор рекомендует пользоваться такой конструкцией в конструкторе:

super();
			if(stage!=null)
				addEventListener(Event.ADDED_TO_STAGE, init);
			else init(null);

В init нужно написать:



public function init(ev:Event):void 
		{
			if(ev!=null) removeEventListener(Event.ADDED_TO_STAGE, init);

			haxe.init(null);
			addChild(debug.display);
			debug.clear();
			debug.draw(space);

			addEventListener(Event.ENTER_FRAME, efr);
		}

Код в enter_frame

 
function efr(e)
		{
			//addChild(fps);
				space.step(1/60,10,4);
				for (var i=1;i<space.dynamics.length;i++)//а это пример для вас
				{// перебираем динамические объекта
					if (space.dynamics.at(i).position.y>600) // если y>600 у объекта
					{
						space.dynamics.at(i).position.setxy(150,0); //телепортируем его в другое место
						space.dynamics.at(i).velocity.setxy(0,0);// убираем скорость
					}
				}
				debug.clear();
				debug.draw(space);
				debug.flush();
		}

Пример создание объекта:

function createBox(obj) //obj - это мувиклип
		{
			var Box=new Body(BodyType.DYNAMIC);
			var poly=new Polygon(Polygon.rect(-obj.width/2, -obj.height/2, obj.width, obj.height));
			Box.position.setxy(obj.x,obj.y);
			Box.shapes.add(poly);
			Box.graphic=obj;
			Box.space=space;
		}
Sorry, either Adobe flash is not installed or you do not have it enabled

Рекомендую:

29.7.2011 | последняя редакция: 29.07.2011 |
  1. Сергей
    29.7.2011 в 21:39

    А вот у меня физикой и не пахнет 🙂 http://gamesfirst.xirad.ru/no_phis.swf
    Это то что ты задавал. Всё конечно абы-как, но в основном… Перетаскиваем драг энд дропом кубики, расположенные справа, снизу кнопка запуска проверки… Нужно расположить квадраты парами одного цвета, каждый квадрат из инвентаря справа от имеющегося на сцене. На имеющийся квадрат нельзя положить ещё один.

  2. admin
    29.7.2011 в 22:08

    Очень хорошо. Но нужна сетка (как тетрадь в клеточку), ато как-то не наглядно.

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

    Сделай готовый продукт, придумай геймплэй, посмотри игру electric box 2.

  3. Сергей
    29.7.2011 в 23:20

    Ок, посмотрел electric box 2, всё понятно. На данный момент страдаю от неумения правильно всё упорядочить… Разложить по классам грамотнее, от чего становится довольно проблематично. Буду двигаться к созданию геймплея и привлекательности ) Ещё хочу всё сделать меню и какое-то переключение между уровнями, почему-то это проблема для меня.

  4. admin
    29.7.2011 в 23:22

    Меню это самая херня. Используй флэш ide как редактор.

  5. Сергей
    30.7.2011 в 09:42

    Понятно. Ты использовал интерфейсы при программировании игр? (интерфейсы AS3 в смысле) Можно ли без них обойтись всегда? Я так понимаю если извратиться, то ситуаций когда они будут нужны — не будет, но видимо если их использовать, то иногда это лучше более сложных извращений. В общем вопрос: можно ли вообще без них.

  6. admin
    30.7.2011 в 10:32

    А вообще, нет, не использую вообще.
    Интерфейсы это организационная штука. Код пишу для себя.

  7. Сергей
    30.7.2011 в 22:14

    Если не секрет, какая у тебя структура классов в играх? Хотя не знаю правильно ли «структура», возможно лучше иерархия. У меня капец какие проблемы сейчас с этим… Только в главном классе получается нормально работать, получается практически полностью «процедурное» программирование, а не ооп 🙁 Хотя пожалуй даже скорее проблема в иерархии DisplayObject’ов… Сегодня например застрял на проблеме непоняток как обратиться к stage не из Main… Я даж не знаю, мне кажется до этого получалось, а сейчас именно во время выполнения ошибка (не при компиляции), гррр
    Ну так вот, вопр: как ты строишь и используешь структуру типа «заставка-меню-уровень1-уровень2-…-очки»? У тебя вообще есть такие классы как Меню, Уровень и т.п.? Запутался что из чего вызывать 🙁

  8. admin
    30.7.2011 в 22:55

    Во первых я те анекдот написал.

    Тебя никто не заставляет писать классы.

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

    Да, иногда я делаю такие классы как меню и тп.

  9. Сергей
    30.7.2011 в 23:27

    Меня никто не заставляет… Но я хочу!!! 🙂 Ладно, окей, будем ждать моего просвящения… Буду экспериментировать 🙂

  10. admin
    30.7.2011 в 23:31

    Второе напишу — вписывая мувиклипу класс — ты тем самым объявляешь класс, который выполнится при добавлении этого объекта. Если класса нету — тогда ничего дополнительно и не будет происходить.

    В случае меню тут можно расписывать — как только добавили на стэйдж — цепляем слушателей.
    Хотя с другой стороны — всё это-же ты можешь сделать и в одном классе. Решать тебе.

  11. Сергей
    31.7.2011 в 00:11

    По поводу выполнения класса при добавлении объекта — понял из практики, ок. Кстати я часто специально создаю класс какого-нибудь мувиклипа вручную, иногда мне бывает нужно добавить какие-то свойства/методы и мне это кажется очень удобным. Есдинственное что меня останавливает от дальнейшего развития программирования в этом направлении — сложность взаимосвязей между объектами… Нужно учитывать на каком они уровне, кто у них «родитель», чьи они наследники и что-то в этом роде, если я конечно правильно вижу картину.
    Да, я чётко вижу что могу сделать всё это в одном классе, но так же на данный момент мне кажется что использование отдельных классов было бы удобнее, главное разобраться, но посмотрим что у меня будет получаться из этого…

  12. Спасибо! Сохранил мне кучу времени )