|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Aug 2012
Сообщений: 38
|
Работа PhysicsEditor для Box2d в FlashDevelop
Добрый вечер. Учусь пользоваться PhysicsEditor для Box2d, рассматриваю пример. Сам исходник урока в Flash CS, пробую запустить проект в FlashDevelop не выходит. Видимо, это сам PhysicsEditor под Flash Ide составляет код. В общем, помогите, преписать код PhysicsData.as под FlashDevelop.
Последний раз редактировалось Fazer; 16.07.2013 в 11:45. |
|
|||||
Регистрация: Aug 2012
Сообщений: 38
|
Да, точно, я делаю:
(забыл их вставить в исходник, сейчас поправлю) Но, дело в том, что в PhysicsData.as используется , которая обращется к этим картинкам по именам dict["drink"] = [ [ // density, friction, restitution 1, 0.2, 0.2, // categoryBits, maskBits, groupIndex, isSensor 1, 65535, 0, false, 'POLYGON', [ [ new b2Vec2(38/ptm_ratio, 61.5/ptm_ratio) , new b2Vec2(33/ptm_ratio, 171.5/ptm_ratio) , new b2Vec2(22/ptm_ratio, 167.5/ptm_ratio) , new b2Vec2(11/ptm_ratio, 71.5/ptm_ratio) , new b2Vec2(14/ptm_ratio, 63.5/ptm_ratio) ] , [ new b2Vec2(77.5/ptm_ratio, 73/ptm_ratio) , new b2Vec2(67.5/ptm_ratio, 161/ptm_ratio) , new b2Vec2(63.5/ptm_ratio, 170/ptm_ratio) , new b2Vec2(33/ptm_ratio, 171.5/ptm_ratio) , new b2Vec2(38/ptm_ratio, 61.5/ptm_ratio) , new b2Vec2(48/ptm_ratio, 60.5/ptm_ratio) , new b2Vec2(76/ptm_ratio, 64.5/ptm_ratio) ] , [ new b2Vec2(10/ptm_ratio, 4.5/ptm_ratio) , new b2Vec2(41.5/ptm_ratio, 29/ptm_ratio) , new b2Vec2(33.5/ptm_ratio, 32/ptm_ratio) , new b2Vec2(7.5/ptm_ratio, 10/ptm_ratio) , new b2Vec2(9/ptm_ratio, 4.5/ptm_ratio) ] , [ new b2Vec2(41.5/ptm_ratio, 29/ptm_ratio) , new b2Vec2(48/ptm_ratio, 60.5/ptm_ratio) , new b2Vec2(39.5/ptm_ratio, 58/ptm_ratio) , new b2Vec2(33.5/ptm_ratio, 32/ptm_ratio) ] , [ new b2Vec2(48/ptm_ratio, 60.5/ptm_ratio) , new b2Vec2(38/ptm_ratio, 61.5/ptm_ratio) , new b2Vec2(39.5/ptm_ratio, 58/ptm_ratio) ] ] ] ]; Последний раз редактировалось iNils; 16.07.2013 в 14:10. |
|
|||||
Dictionary у вас создается в конструкторе класса PhysicsData, с этим все ОК. В приведенном вами коде создается ключ и его значение в словаре, тут тоже все ОК. Если где то что то не работает, то проблема не в нем. Я не увидел у вас в коде того, как картинка прикрепляется к телу и апдейтится.
|
|
|||||
Регистрация: Aug 2012
Сообщений: 38
|
Так, дело всё в Main.as. Да, не понимаю до конца, как здесь это делается. Делаю так:
package { // импорты классов Flash import flash.display.Bitmap; import flash.display.Sprite; import flash.events.Event; import flash.utils.getDefinitionByName; import flash.display.DisplayObject; // импорты классов Box2d import Box2D.Dynamics.Joints.*; import Box2D.Dynamics.*; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Common.Math.*; // импорт данных о шейпах import PhysicsData; public class Main extends Sprite { [Embed(source = 'floor.png')] public static const Floor:Class; [Embed(source = "drink.png")] public static const Drink:Class; [Embed(source = "bkg_cor.png")] public static const Bkg_cor:Class; [Embed(source = "hamburger.png")] public static const Hamburger:Class; [Embed(source = "hotdog.png")] public static const Hotdog:Class; [Embed(source = "icecream.png")] public static const Icecream:Class; [Embed(source = "icecream2.png")] public static const Icecream2:Class; [Embed(source = "icecream3.png")] public static const Icecream3:Class; public var nextSprite:Number=10; // создадим объект, который содержит данные о шейпах public var physicsData:PhysicsData = new PhysicsData(); // создадим мир Box2D, настроим вектор гравитации public var world:b2World = new b2World(new b2Vec2(0, 10.0), true); public function Main():void { // Вытаскиваем картинку из скомпиленных ресурсов var artClass:Class = getDefinitionByName("floor") as Class; addChild(new artClass() as DisplayObject); // Создаем объект DisplayObject для добавления его на сцену var bitmap:Bitmap = new Bitmap(new artClass(0, 0), "auto", true); // Создаем физическое тело из класса с данными о шейпах var body:b2Body=physicsData.createBody("floor", world, b2Body.b2_staticBody, bitmap); // Настраиваем начальное положение тела body.SetPositionAndAngle(new b2Vec2(0,337/physicsData.ptm_ratio), 0); // Добавляем изображение на сцену addChild(bitmap); // Добавляем слушатель события ENTER_FRAME, // для обновления спрайтов и тел addEventListener(Event.ENTER_FRAME, update, false, 0, true); } //Эта функция добавляет новые спрайты на сцену public function addNewSprites():void { // Спрайт добавляется только каждый 30 кадр nextSprite--; if(nextSprite > 0) { return; } nextSprite = 30; // имена предметов/спрайтов, которые мы используем var items:Array=["hamburger", "drink", "icecream", "icecream2", "icecream3"]; // Выбираем случайный объект var name:String=items[Math.floor(Math.random()*items.length)]; // Вытаскиваем картинку из скомпиленных ресурсов var artClass:Class = getDefinitionByName(name) as Class; <b>addChild(new artClass() as DisplayObject);b> // Создаем объект DisplayObject для добавления его на сцену var bitmap:Bitmap = new Bitmap(new artClass(0, 0), "auto", true); // Создаем физическое тело из класса с данными о шейпах var body:b2Body=physicsData.createBody(name, world, b2Body.b2_dynamicBody, bitmap); // Устанавливаем случайную начальную позицию body.SetPositionAndAngle(new b2Vec2(Math.random()*14,-2), 0); // Добавляем изображение на сцену addChild(bitmap); } // эта функция запускает механизм симуляции физики // и обновляет позиции и вращение спрайтов, в соответствии с позициями // и вращением тел, участвующих в симуляции public function update(e : Event):void { // шаг времени мира world.Step(1 / 30, 10, 10); world.ClearForces(); // добавляем новые спрайты в мир addNewSprites(); // обновляем скины тел var Body:b2Body = world.GetBodyList(); for ( ; Body; Body = Body.GetNext()) { if (Body.GetUserData() is Bitmap) { // получаем ссылку на скин тела var bitmap:Bitmap=Body.GetUserData() as Bitmap; // обновляем положение скина bitmap.x=Body.GetPosition().x*physicsData.ptm_ratio; bitmap.y=Body.GetPosition().y*physicsData.ptm_ratio; //обновляем вращение спрайта bitmap.rotation = Body.GetAngle() * (180/Math.PI); } } } } } Куда же тогда деть все [Embed]? Подскажите) Добавлено через 4 часа 3 минуты Порылся по нескольким примерам, по ним, следует делать так: // Вытаскиваем картинку из скомпиленных ресурсов var artClass:Class = getDefinitionByName("floor") as Class; var floor:DisplayObject = new artClass(); Но результат тот же (пустой экран без ошибок) Последний раз редактировалось Fazer; 16.07.2013 в 22:22. |
|
|||||
Вы как то усложняете работу с ресурсами, для начала добейтесь появления картинок на экране без физики, а потом уже приделывайте её.
С ембед обычно работают так: использование: Добавлено через 33 секунды у вас по моему картинки нигде и не добавляются на сцену |
|
|||||
Регистрация: Aug 2012
Сообщений: 38
|
Да, вроде как добавляются:
// Создаем объект DisplayObject для добавления его на сцену var bitmap:Bitmap = new Bitmap(new artClass(0, 0), "auto", true); // Добавляем изображение на сцену addChild(bitmap); [Embed(source = 'floor.png')] public static const Floor:Class; var floor:Bitmap = new Floor(); addChild (floor); |
|
|||||
Регистрация: Aug 2012
Сообщений: 38
|
Попробовал. Без изменений. Похоже так и не разберусь, буду вручную создавать фигуры. PainKiller, спасибо за участие.
|
Часовой пояс GMT +4, время: 10:19. |
|
« Предыдущая тема | Следующая тема » |
|
|