Лучший способ получить цвет, где мышью щелкнули в AS3

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

10
задан Theo 17 September 2008 в 06:49
поделиться

2 ответа

Вот еще более простая реализация. Все, что Вы делаете, является взятием, снимок этапа с помощью ничьей () метод bitmapData, затем использует getPixel () на пикселе под мышью. Преимущество этого состоит в том, что можно выбрать что-либо, что это было оттянуто к этапу, не только данному битовому массиву.

import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.*;

stage.addEventListener(MouseEvent.CLICK, getColorSample);

function getColorSample(e:MouseEvent):void {
    var bd:BitmapData = new BitmapData(stage.width, stage.height);
    bd.draw(stage);
    var b:Bitmap = new Bitmap(bd);
    trace(b.bitmapData.getPixel(stage.mouseX,stage.mouseX));
}

Надежда это полезно!


Править:

Эта отредактированная версия использует сингл BitmapData, и удаляет ненужный шаг создания a Bitmap. Если Вы выбираете цвет на MOUSE_MOVE затем это важно для предотвращения проблем памяти.

Примечание: при использовании пользовательского спрайта курсора, необходимо будет использовать объект кроме 'состояния', или иначе Вы будете выбирать цвет пользовательского спрайта вместо того, что находится под этим.

import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.*;

private var _stageBitmap:BitmapData;

stage.addEventListener(MouseEvent.CLICK, getColorSample);

function getColorSample(e:MouseEvent):void 
{
    if (_stageBitmap == null) {
        _stageBitmap = new BitmapData(stage.width, stage.height);
    }
    _stageBitmap.draw(stage);

    var rgb:uint = _stageBitmap.getPixel(stage.mouseX,stage.mouseY);

    var red:int =  (rgb >> 16 & 0xff);
    var green:int =  (rgb >> 8 & 0xff);
    var blue:int =  (rgb & 0xff);

    trace(red + "," + green + "," + blue);
}
8
ответ дан 3 December 2019 в 16:11
поделиться

Несколько минут на Странице BitmapData LiveDoc возьмут Вас, куда необходимо пойти. После того как Вам загрузили Ваше изображение в Растровую переменную, можно получить доступ к ее свойству BitmapData. Добавьте Слушателя События нажатия мыши изображения и затем используйте BitmapData:: getPixel. Пример для getPixel показывает, как преобразовать uint ответ на шестнадцатеричный код rgb.

Вот модификация Примера, данного на странице BitmapData, которая работала на меня (использующий mxmlc - YMMV):

package {
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.net.URLRequest;

    public class BitmapDataExample extends Sprite {
        private var url:String = "santa-drunk1.jpg";
        private var size:uint = 200;
        private var image:Bitmap;

        public function BitmapDataExample() {
            configureAssets();
        }

        private function configureAssets():void {
            var loader:Loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);

            var request:URLRequest = new URLRequest(url);
            loader.load(request);
            addChild(loader);
        }

        private function completeHandler(event:Event):void {
            var loader:Loader = Loader(event.target.loader);
            this.image = Bitmap(loader.content);

            this.addEventListener(MouseEvent.CLICK, this.clickListener);
        }

        private function clickListener(event:MouseEvent):void {
            var pixelValue:uint = this.image.bitmapData.getPixel(event.localX, event.localY)
            trace(pixelValue.toString(16));
        }
    }
}
10
ответ дан 3 December 2019 в 16:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: