Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.07.2013, 20:35
Fazer вне форума Посмотреть профиль Отправить личное сообщение для Fazer Найти все сообщения от Fazer
  № 1  
Ответить с цитированием
Fazer
 
Аватар для Fazer

Регистрация: Aug 2012
Сообщений: 38
По умолчанию Работа PhysicsEditor для Box2d в FlashDevelop

Добрый вечер. Учусь пользоваться PhysicsEditor для Box2d, рассматриваю пример. Сам исходник урока в Flash CS, пробую запустить проект в FlashDevelop не выходит. Видимо, это сам PhysicsEditor под Flash Ide составляет код. В общем, помогите, преписать код PhysicsData.as под FlashDevelop.
Вложения
Тип файла: zip PhysicsEdtior-Flash-Box2D.zip (568.5 Кб, 45 просмотров)
Тип файла: rar TestPhysicsEditor.rar (375.2 Кб, 32 просмотров)


Последний раз редактировалось Fazer; 16.07.2013 в 11:45.
Старый 16.07.2013, 11:08
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 2  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
во флеш про у вас ресурсы (картинки). Во флешдевелоп, вам надо их заэмбедить (читайте про тег [Embed])

Старый 16.07.2013, 11:53
Fazer вне форума Посмотреть профиль Отправить личное сообщение для Fazer Найти все сообщения от Fazer
  № 3  
Ответить с цитированием
Fazer
 
Аватар для Fazer

Регистрация: Aug 2012
Сообщений: 38
Да, точно, я делаю:

Код AS3:
[Embed(source = 'floor.png')] public static const Floor:Class;
и так далее
(забыл их вставить в исходник, сейчас поправлю)

Но, дело в том, что в PhysicsData.as используется
Код AS3:
public var dict:Dictionary;
, которая обращется к этим картинкам по именам
Код AS3:
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.
Старый 16.07.2013, 13:23
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 4  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
Dictionary у вас создается в конструкторе класса PhysicsData, с этим все ОК. В приведенном вами коде создается ключ и его значение в словаре, тут тоже все ОК. Если где то что то не работает, то проблема не в нем. Я не увидел у вас в коде того, как картинка прикрепляется к телу и апдейтится.

Старый 16.07.2013, 18:11
Fazer вне форума Посмотреть профиль Отправить личное сообщение для Fazer Найти все сообщения от Fazer
  № 5  
Ответить с цитированием
Fazer
 
Аватар для Fazer

Регистрация: Aug 2012
Сообщений: 38
Так, дело всё в Main.as. Да, не понимаю до конца, как здесь это делается. Делаю так:

Код AS3:
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);
				}
			}
		}
	}
}
Т.е. здесь идёт добавление по очереди ключей по имени. Как же добавить картинки этих ключей, я не пойму, кроме как:
Код AS3:
addChild(new artClass() as DisplayObject);
Куда же тогда деть все [Embed]? Подскажите)

Добавлено через 4 часа 3 минуты
Порылся по нескольким примерам, по ним, следует делать так:


Код AS3:
// Вытаскиваем картинку из скомпиленных ресурсов
     var artClass:Class = getDefinitionByName("floor") as Class;
 
     var floor:DisplayObject = new artClass();

Но результат тот же (пустой экран без ошибок)


Последний раз редактировалось Fazer; 16.07.2013 в 22:22.
Старый 17.07.2013, 10:37
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 6  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
Вы как то усложняете работу с ресурсами, для начала добейтесь появления картинок на экране без физики, а потом уже приделывайте её.
С ембед обычно работают так:
Код AS3:
[Embed(source="picture.jpg")]
private var Picture:Class;
использование:
Код AS3:
var pic:Bitmap = new Picture();
addChild (pic);
Добавлено через 33 секунды
у вас по моему картинки нигде и не добавляются на сцену

Старый 17.07.2013, 12:58
Fazer вне форума Посмотреть профиль Отправить личное сообщение для Fazer Найти все сообщения от Fazer
  № 7  
Ответить с цитированием
Fazer
 
Аватар для Fazer

Регистрация: Aug 2012
Сообщений: 38
Да, вроде как добавляются:
Код AS3:
// Создаем объект DisplayObject для добавления его на сцену  
     var bitmap:Bitmap = new Bitmap(new artClass(0, 0), "auto", true);
// Добавляем изображение на сцену
     addChild(bitmap);
Пробую и просто добавить картинки:

Код AS1/AS2:
[Embed(source = 'floor.png')] public static const Floor:Class;	
 
var floor:Bitmap = new Floor();
addChild (floor);
Результат тот же. Ещё заметил, через минуту после запуска в окне Output наблюдается:
Код AS3:
Done(0)
[No debug Flash player connection request]

Старый 18.07.2013, 10:38
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 8  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
То что дебаг не работает я тоже заметил, проект битый какой то, попробуйте создать новый.

Старый 18.07.2013, 13:40
Fazer вне форума Посмотреть профиль Отправить личное сообщение для Fazer Найти все сообщения от Fazer
  № 9  
Ответить с цитированием
Fazer
 
Аватар для Fazer

Регистрация: Aug 2012
Сообщений: 38
Попробовал. Без изменений. Похоже так и не разберусь, буду вручную создавать фигуры. PainKiller, спасибо за участие.

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:25.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:25.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.