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

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

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

Регистрация: Jun 2011
Сообщений: 83
Записей в блоге: 1
По умолчанию не работает скининг

Код AS3:
package 
{
	import Box2D.Dynamics.b2World;
	import flash.display.Bitmap;
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import utils.Key;
	import utils.Utils;
	import Box2D.Common.Math.b2Vec2;
	import Box2D.Dynamics.b2Body;
	/**
	 * ...
	 * @author 
	 */
	public class Tank extends Entity 
	{
		[Embed(source = "../assets/tank/tank1.png")] private var TANK1:Class;
		public var speed:int = 10;
		private var sprite:Sprite = new Sprite();
		private var bitmap:Bitmap = new TANK1;
		public function Tank(world:b2World, stage:Stage) {
			super(world, stage);
 
			bitmap.x = -bitmap.width / 2;
			bitmap.y = -bitmap.height / 2;
 
			sprite.addChild(bitmap);
			stage.addChild(sprite);
			sprite.x = 100;
			sprite.y = 100;
 
 
			body_def.position.Set(sprite.x / 30, sprite.y / 30);
			body_def.type = b2Body.b2_dynamicBody;
			body_def.userData = sprite;
			body = _world.CreateBody(body_def);
			body_shape.SetAsBox(sprite.width / 30 / 2, sprite.height / 30 / 2);
			body_fixture.shape = body_shape;
			body.CreateFixture(body_fixture);
 
		}
		override protected function update(e:Event):void {
			if (input.isKey(Key.A)) body.SetAngle(body.GetAngle() - Utils.getRadian(2));
			if (input.isKey(Key.D)) body.SetAngle(body.GetAngle() + Utils.getRadian(2));
			if (input.isKey(Key.W)) body.SetLinearVelocity(new b2Vec2(speed * Math.sin(body.GetAngle()), -speed * Math.cos(body.GetAngle())));
			if (input.isKey(Key.S)) body.SetLinearVelocity(new b2Vec2(-speed*Math.sin(body.GetAngle()), speed*Math.cos(body.GetAngle())));
		}
 
		override protected function keyUp(e:KeyboardEvent):void {
			if (e.keyCode == Key.W) body.SetLinearVelocity(new b2Vec2(0.0, 0.0));
			if (e.keyCode == Key.S) body.SetLinearVelocity(new b2Vec2(0.0, 0.0));
		}
	}
}
Код AS3:
package 
{
	import Box2D.Collision.Shapes.b2PolygonShape;
	import Box2D.Dynamics.b2Body;
	import Box2D.Dynamics.b2BodyDef;
	import Box2D.Dynamics.b2Fixture;
	import Box2D.Dynamics.b2FixtureDef;
	import Box2D.Dynamics.b2World;
	import flash.display.Stage;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import utils.Input;
 
	/**
	 * ...
	 * @author 
	 */
	public class Entity 
	{
		protected var _world:b2World;
		protected var _stage:Stage;
		protected var input:Input;
		public var body:b2Body;
		public var body_def:b2BodyDef;
		public var body_shape:b2PolygonShape;
		public var body_fixture:b2FixtureDef;
		public function Entity(world:b2World,stage:Stage):void {
			_world = world;
			_stage = stage;
			input = new Input(_stage);
			body_def = new b2BodyDef();
			body_shape = new b2PolygonShape();
			body_fixture = new b2FixtureDef();
			_stage.addEventListener(Event.ENTER_FRAME, update);
			_stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
			_stage.addEventListener(KeyboardEvent.KEY_UP, keyUp);
		}
 
		protected function update(e:Event):void {
		}
 
 
		protected function keyDown(e:KeyboardEvent):void {
 
		}
 
		protected function keyUp(e:KeyboardEvent):void {
 
		}
 
	}
 
}
почему у меня скин танка и его фигура живут отдельно?

Добавлено через 1 час 11 минут
проблема была в update головного класа

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
потому что в методе апдейт нужно и позицию спрайта каждый раз пересчитывать, что-то типа:
Код AS3:
var bodyPosition:b2Vec2 = body.getPosition();
sprite.x = bodyPosition.x * 30;
sprite.y = bodyPosition.y * 30;

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

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

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


 


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


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