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

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

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

Регистрация: Oct 2009
Сообщений: 20
По умолчанию userData не меняет позицию

Пытаюсь переписать HelloWorld так, чтобы вместо мувиков использовать картинки. Проблема в том, что картинки выводятся в верхнем левом углу и не меняют позицию.

Код AS3:
package 
{		
	import flash.display.Sprite;
	import flash.events.Event;
	// Classes used in this example
	import Box2D.Dynamics.*;
	import Box2D.Collision.*;
	import Box2D.Collision.Shapes.*;
	import Box2D.Common.Math.*;
 
	[SWF(backgroundColor="#000000")]
 
 
	/**
	 * ...
	 */
	public class Main extends Sprite 
	{
 
		[Embed(source="smile.gif")] 
		[Bindable] 
		public var Smile: Class;		
 
		public function Main():void 
		{
			// Add event for main loop
			addEventListener(Event.ENTER_FRAME, Update, false, 0, true);
 
 
			// Creat world AABB
			var worldAABB:b2AABB = new b2AABB();
			worldAABB.lowerBound.Set(-100.0, -100.0);
			worldAABB.upperBound.Set(100.0, 100.0);
 
			// Define the gravity vector
			var gravity:b2Vec2 = new b2Vec2(0.0, 10.0);
 
			// Allow bodies to sleep
			var doSleep:Boolean = true;
 
			// Construct a world object
			m_world = new b2World(worldAABB, gravity, doSleep);			
 
			// Vars used to create bodies
			var body:b2Body;
			var bodyDef:b2BodyDef;
			var boxDef:b2PolygonDef;
			var circleDef:b2CircleDef;
 
 
 
			// Add ground body
			bodyDef = new b2BodyDef();
			//bodyDef.position.Set(15, 19);
			bodyDef.position.Set(10, 12);
			//bodyDef.angle = 0.1;
			boxDef = new b2PolygonDef();
			boxDef.SetAsBox(30, 3);
			boxDef.friction = 0.3;
			boxDef.density = 0; // static bodies require zero density
			body = m_world.CreateBody(bodyDef);
			body.CreateShape(boxDef);
			body.SetMassFromShapes();
 
			// Add some objects
			for (var i:int = 1; i < 10; i++){
				bodyDef = new b2BodyDef();
				bodyDef.position.x = Math.random() * 15 + 5;
				bodyDef.position.y = Math.random() * 10;
				var rX:Number = Math.random() + 0.5;
				var rY:Number = Math.random() + 0.5;
 
				// Box
				boxDef = new b2PolygonDef();
				boxDef.SetAsBox(rX, rY);
				boxDef.density = 1.0;
				boxDef.friction = 0.5;
				boxDef.restitution = 0.2;
				bodyDef.userData = new Smile();
				bodyDef.userData.width = rX * 2 * 30; 
				bodyDef.userData.height = rY * 2 * 30; 
				body = m_world.CreateBody(bodyDef);
				body.CreateShape(boxDef);
 
				body.SetMassFromShapes();
				addChild(bodyDef.userData);
			}
 
		}
 
		public function Update(e:Event):void{
 
			m_world.Step(m_timeStep, m_iterations);
 
			// Go through body list and update sprite positions/rotations
			for (var bb:b2Body = m_world.m_bodyList; bb; bb = bb.m_next){
				if (bb.m_userData is Sprite){
					bb.m_userData.x = bb.GetPosition().x * 30;
					bb.m_userData.y = bb.GetPosition().y * 30;
					bb.m_userData.rotation = bb.GetAngle() * (180/Math.PI);
				}
			}
 
		}
 
		public var m_world:b2World;
		public var m_iterations:int = 10;
		public var m_timeStep:Number = 1.0/30.0;
 
	}
 
}

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

Регистрация: Jul 2009
Сообщений: 35
При такой инициализации у тебя Smile это Bitmap.
Соответственно проверка на Sprite не проходит.
Замени на Bitmap.

P.S: и вообще это криво будет выглядеть, т.к. картинка выровнена по левому верхнему углу, а надо по середине. Так что либо обернуть в контейнер и в нём выровнять либо при каждом перемещении доравнивать на половину ширины и высоты.


Последний раз редактировалось elfon; 30.10.2009 в 18:29. Причина: примечание
Создать новую тему Ответ Часовой пояс GMT +4, время: 02:34.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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