일단 코드부터.
//버튼 클래스
package {
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.filters.ColorMatrixFilter;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.net.URLRequest;
import flash.events.Event;
public class TableButton extends Sprite{
var _rgbScreenImage:RGBScreenImage;
var _rgbImageColor:uint;
var defaultFilter:ColorMatrixFilter = null;
var hotFilter:ColorMatrixFilter;
//var selectableFilter:ColorMatrixFilter;
public function TableButton(buttonImage:Bitmap/*, colorIndex:uint*/){
//filter set
var BRIGHT_AMOUNT:int = 1;//1~10
var matrix:Array = new Array();
matrix = matrix.concat([0.7, 0, 0, 0, BRIGHT_AMOUNT*50]);//red
matrix = matrix.concat([0, 0.7, 0, 0, BRIGHT_AMOUNT*50]);//green
matrix = matrix.concat([0, 0, 0, 0, 0]);//blue
matrix = matrix.concat([0, 0, 0, 1, 0]);//alpha
hotFilter = new ColorMatrixFilter(matrix);
//image load start
_rgbImageColor = 0x000000;//colorIndex;
this.addChild(buttonImage);
_rgbScreenImage = new RGBScreenImage(buttonImage, _rgbImageColor);
}
public function hOverSetFilter():void{
this.filters = [hotFilter];
}
public function hOutSetFilter():void{
this.filters = [defaultFilter];
}
public function ():void{
//click event
}
public function getRGBScreenImage():BitmapData{
return _rgbScreenImage.getRGBScreenImage();
}
public function getMousePointColor(locX:Number, locY:Number):uint{
return _rgbScreenImage.getMousePointColor(locX, locY);
}
}
}
//버튼을 담는 버튼 스크린 클래스
package{
import flash.display.Sprite;
import flash.display.BitmapData;
import flash.geom.Matrix;
import flash.geom.ColorTransform;
import flash.display.BlendMode;
import flash.events.MouseEvent;
public class ButtonImageScreen extends Sprite{
private var rgbScreen:BitmapData;
private var buttonVector:Array = new Array();
private var releasedButton:TableButton;
public function ButtonImageScreen(locX:Number, locY:Number, screenW:Number, screenH:Number){
this.x = locX;
this.y = locY;
this.width = screenW;
this.height = screenH;
rgbScreen = new BitmapData(screenW, screenH, false);
this.addEventListener(MouseEvent.MOUSE_MOVE, );
this.addEventListener(MouseEvent.CLICK, );
}
public function addButton(button:TableButton, locX:Number, locY:Number):void{
buttonVector.push(button);
//this.addChild(button);//this.addChild(buttonVector[buttonVector.length-1];
this.addChild(buttonVector[buttonVector.length-1]);
button.x = locX;
button.y = locY;
var matrix:Matrix = new Matrix();
matrix.tx = locX;
matrix.ty = locY;
var colorTransform:ColorTransform = new ColorTransform();
colorTransform.color = buttonVector.length;
rgbScreen.draw(button.getRGBScreenImage(), matrix, colorTransform, BlendMode.LAYER);
}
private function (evt:MouseEvent):void{
if(releasedButton != null){
releasedButton.hOutSetFilter();
releasedButton = null;
}
var clickColor:int = rgbScreen.getPixel(evt.localX, evt.localY);
if(clickColor != 0xffffff){
releasedButton = buttonVector[int];
releasedButton.hOverSetFilter();
}
}
private function (evt:MouseEvent):void{
if(releasedButton != null){
releasedButton.();
}
}
}
}
버튼이랑 버튼 스크린 둘다 sprite상속받은놈들인데, 메인클래스에서 버튼을 생성해서 버튼스크린에 등록한다음 버튼 스크린을 메인클래스에 차일드로 붙이는 방식임
대략 이런형식으루
var buttonScreen:ButtonImageScreen = new ButtpnImageScreen(패러미터);
buttonScreen.addButton(new TableButton(이미지), x, y);
이미지 포함관계는
메인(sprite)[버튼스크린(sprite)[버튼(sprite)[버튼이미지(bitmap)]]]
요런식으로 포함되는데. 에러도 없고 경고도 없는데, swf실행시켜보면 이미지가 안나옴. 포함관계 문제인가해서 동일한 포함형태로 짧게 코드짜서 실행시켜봤는데 그건 문제 없었음. 뭐가 문제인지 해결좀ㅠㅠ
RGBScreenImage저거 뭐여?