Показать сообщение отдельно
Старый 01.08.2011, 09:40
Gantenbain вне форума Посмотреть профиль Отправить личное сообщение для Gantenbain Найти все сообщения от Gantenbain
  № 3  
Ответить с цитированием
Gantenbain

Регистрация: Jul 2011
Сообщений: 32
Спасибо, за оперативный ответ.
Думаю, Вас бы очень повеселило выражение моего лица, с которым смотрю на
Цитата:
// 0xff0000,0xff00ff
Возможно, что проблема связана с тем, что "заливку" "большой" Bitmap провожу в несколько этапов, с помощью "внутренней" функции, в качестве параметра которой передаю this
Код:
var paintSh:Function = function(bmp:Bitmap):void {
Однако, некоторый толчок мысли задан...
P.S. "Внутренняя" функция ни при чем - квадрат возвращает 2 цвета...Что-то возле drawPath...
P.P.S. Если определяю параметры commands, data внутри "внутренней" функции, то нахожу 2 цвета в bitmapData, при попытке передать параметры извне - 1 цвет.

Добавлено через 1 час 43 минуты
Все понял. paintSh(this) в моей реализации передает ссылку на глобальный объект вместо экземпляра класса. Досадный ляп. Большое спасибо, Wolsh.
P.S. И это не то . Так не долго в рассудке повредиться

Добавлено через 3 часа 57 минут
Несмотря на то, что, благодаря Wolsh, доступ к адресам пикселей оказался открыт , академический интерес к проблеме остался (пример сугубо условный):
Код AS3:
package game
{
	import flash.display.Sprite;
 
	public class  Example extends Sprite
	{
		public function Example() {
			var er:MyClass = new MyClass();
			addChild(er);
		}
	}
 
}
Код AS3:
package game
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Shape;
	import flash.geom.Point;
	import flash.geom.Rectangle;
 
	public class MyClass extends Bitmap 
	{
		private var commands:Vector.<int>;
		private var data:Vector.<Number>;
 
		public function MyClass() {
			var thisbitmapdata:BitmapData = new BitmapData(800, 600, true, 0x80FFFFFF);
			this.bitmapData = thisbitmapdata;
			commands = Vector.<int>([1, 2, 2, 2, 2]);
			data = Vector.<Number>([5, 5, 20, 5, 20, 25, 5, 25, 5, 5]);
			var i:int;
			var paintBm:Function = function(bmp:Bitmap):void {
				trace(bmp);
				var tmpSh:Shape = new Shape();
				tmpSh.graphics.beginFill(0xFF00FF, 1);
				tmpSh.graphics.drawPath(commands, data);
				//tmpSh.graphics.drawPath(Vector.<int>([1, 2, 2, 2, 2]), Vector.<Number>([5, 5, 20, 5, 20, 25, 5, 25, 5, 5]));
				tmpSh.graphics.endFill();
				var r:Rectangle = tmpSh.getRect(stage);
				var pixelValue:uint;
				var arr:Vector.<String> = new Vector.<String>();
				var bmpdata:BitmapData = new BitmapData(r.width, r.height, false, 0xFF0000); 
				bmpdata.draw(tmpSh);
				for (var m:int = 0; m < r.width-1; m++) {
					for (var j:int = 0; j < r.height-1; j++) {
						pixelValue =  bmpdata.getPixel(m, j);
				        if (arr.length == 0 || arr.indexOf(("0x"+pixelValue.toString(16))) < 0)  arr.push("0x"+ pixelValue.toString(16));
					} 
				}
				trace(arr);
				bmp.bitmapData.draw(tmpSh);
			}
			while(i < 660) {
			for each (var e:Number in data) data[data.indexOf(e)] = e + i; 
			paintBm(this);
			i += 50;
			}
		}
	}
 
}
Перекинем комментарий с одного "tmpSh.graphics.drawPath(" на другой и видим 2 цвета, вместо одного (?). Попытки передать в функцию параметры, или, создав новые массивы внутри функции, скопировать в них данные из внешних массивов - тупиковые.

Добавлено через 7 часов 3 минуты
Ну и теперь совсем лишившее меня каких-либо идей обстоятельство: при попытке проследить связи объектов теми средствами, что дает FlashDeveloper (точки останова ставил на <bmpdata.draw(tmpSh);> и <paintBm(this);>), обнаружил изменение в поведении программы - теперь выводятся все пикселы массива..., т.е. пошаговое действие отличается от нормальной работы. Внятного объяснения не имею.

Добавлено через 7 часов 38 минут
В общем, размещение
Код AS3:
var tmpSh:Shape = new Shape();
среди полей класса, а не во внутренней функции, решает проблему. Тему можно закрыть.


Последний раз редактировалось Gantenbain; 01.08.2011 в 16:43.