Показать сообщение отдельно
Старый 17.07.2012, 19:24
goldlider вне форума Посмотреть профиль Отправить личное сообщение для goldlider Найти все сообщения от goldlider
  № 1  
Ответить с цитированием
goldlider

Регистрация: Jun 2010
Сообщений: 120
По умолчанию Обращение к BitmapData из Sprite

Добрый день.

Немогу никак получить доступ к BitmapData объекта типа Sprite для отслеживания столкновений метода hitTest класса BitmapData.

Приведу пример:

Class Assets

Код AS3:
package
{
	public class Assets
	{
		[Embed(source="../assets/objects/ship.png")]
		public static const SHIP:Class;
 
                [Embed(source="../assets/stalagmites.png")]
                public static const STALAGMITES:Class;
         }
}

Class Ship
Код AS3:
package
{		
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.DisplayObject;
	import flash.display.Sprite;
 
	public class Ship extends Character
	{				
		private var _shipBitmapData:BitmapData;
		private var _shipBitmap:Bitmap;
		private var _ship:DisplayObject;
 
                public function Ship()
		{
			_ship = new Assets.SHIP();
			_shipBitmapData = new BitmapData(_ship.width, _ship.height, true, 0);
			_shipBitmapData.draw(_ship);
			_shipBitmap = new Bitmap(_shipBitmapData);
			_sprite = new Sprite();
			_sprite.addChild(_shipBitmap); // Спрайт по иерархии наследования затем добавляется в класс World
 
		}
         }
}
Class World
Код AS3:
 
package
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.DisplayObject;
	import flash.display.Sprite;
 
	public class World extends Sprite
	{
              	private var _stalagmites:DisplayObject;
		private var _stalagmitesBitmap:Bitmap;
		private var _stalagmitesBitmapData:BitmapData;
		private var _stalagmitesPoint:Point;
		private var _stalagmitesSprite:Sprite;
 
                public function World()
                {
                        makeStalagmites();
                        addEventListener(Event.ENTER_FRAME, update);
                } 
 
                private function makeStalagmites():void
		{
			_stalagmites = new Assets.STALAGMITES();
			_stalagmitesBitmapData = new BitmapData(_stalagmites.width, _stalagmites.height, true, 0);
			_stalagmitesBitmapData.draw(_stalagmites);
			_stalagmitesBitmap = new Bitmap(_stalagmitesBitmapData);
			_stalagmitesBitmap.y = App.SCREEN_HEIGHT - _stalagmitesBitmap.height;
			_stalagmitesSprite = new Sprite();
			_stalagmitesSprite.addChild(_stalagmitesBitmap);
			addChild(_stalagmitesSprite);
		}
 
		private function update(event:Event):void
		{
                         _shipPoint = new Point(_ship.x, _ship.y);
			_stalagmitesPoint = new Point(_stalagmitesSprite.x, _stalagmitesSprite.y);
 
                        // Должно быть так, но вот обратиться к объекту BitmapData класса Ship немогу
                        if (_shipBitmapData.hitTest(_shipPoint, 255, _stalagmitesBitmapData, _stalagmitesPoint, 255))
			{
				_stalagmitesBitmap.filters = [new GlowFilter()];
			}
			else
			{
				_stalagmitesBitmap.filters = [];
			}
                }
        }
}


Последний раз редактировалось goldlider; 17.07.2012 в 20:25.