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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 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.
Старый 17.07.2012, 20:22
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 2  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
А вот у вас там написано слово private - оно что делает?
И класс Assets.SHIP - он extends Bitmap на самом деле (если я не всё забыл и он таки битмапдата %), т.е. Ship можно поправить как

Код AS3:
package
{		
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.DisplayObject;
	import flash.display.Sprite;
 
	public class Ship extends Character
	{				
		public var _shipBitmapData:BitmapData;//таки private кое-что означает
		private var _shipBitmap:Bitmap;
 
                public function Ship()
		{
			_shipBitmap = new Assets.SHIP();
			_shipBitmapData = _shipBitmap.bitmapData;
			_sprite = new Sprite();
			_sprite.addChild(_shipBitmap); // Спрайт по иерархии наследования затем добавляется в класс World
 
		}
         }
}
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

Регистрация: Jun 2010
Сообщений: 120
Цитата:
Сообщение от -De- Посмотреть сообщение
А вот у вас там написано слово private - оно что делает?
Ссори исправил. Но это не столь важно при данном вопросе.

Старый 17.07.2012, 20:35
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 4  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Вы в общем спрашиваете, как получить BitmapData из Sprite? Никак, у спрайта может не быть её.
Из Ship оно достается как поле его просто (если вот оно не private). Или можно геттер какой-нить сделать, если вы приверженец религии, где поля не надо паблик делать. Только не вижу связи между World и Ship.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

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

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


 


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


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