2011-04-23 3 views
3

수업 프로젝트에서 나는 "Pissed Off Pigs"에 대해 연구 중이다. (나는 생각한다. 돼지는 복수하고 걱정하지 않는다. 나는 그렇지 않다. 그것을 발표 할 예정입니다!) 비트 맵에서 채우기로 동그라미를 만들고 싶습니다 (충돌 수학이 쉽기 때문에 원). 그들이 지금 어떻게 보이는지입니다. 물론비트 스크립트에서 작업 할 투명도를 얻는 방법

How my Pigs look now

은 흰색이 문제입니다. 아래는 "돼지"클래스입니다. 어떤 아이디어? 나는 GIF, PNG, 8 비트 PNG 등을 시도해 봤는데 아무런 효과가없는 것 같다. 이미지 자체는 20 픽셀이며 원의 반지름은 10 픽셀입니다 (따라서 20 픽셀 크기). 여기에 내가 사용하고 이미지입니다 : My Pig Image

는 그리고 나는 이미지마다 시간을로드하지 않아도 아마 나는 새로운 돼지를 만들 때의 BitmapData을 통과 단지 클래스 외부 이미지를로드한다 알고 I 새로운 돼지를 만들지 만 지금은 작동합니다! (Sorta).

매트릭스가 문제를 번역합니까?

오, 나는 bmpImage.transparent를 확인하고 true를 반환합니다 (생성자에서 true를 지정하지 않은 경우에도 마찬가지 임).

`패키지 { import flash.display. ; import flash.net.; import flash.events. ; import flash.geom.; import flash.display.BitmapDataChannel;

public class pig extends Sprite { 
    public var radius:uint; 
    public var velocity:Vec2; 
    public var tt:Sprite; 
    public var pigLoader:Loader; 
    public var bmpImage:BitmapData; 
    public var framesAlive:uint; 


    public function pig(xx:uint, yy:uint, radius:uint, vx:Number, vy:Number, sprite:String){ 
     this.x = xx; 
     this.y = yy; 
     this.radius = radius; 

     this.velocity = new Vec2(vx, vy); 

     pigLoader = new Loader(); 
     pigLoader.load(new URLRequest(sprite)); 
     pigLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, picLoaded); 

    } 
    private function picLoaded(event:Event):void { 
     bmpImage = new BitmapData(pigLoader.width, pigLoader.height, true); 
     bmpImage.draw(pigLoader); 
     tt = new Sprite(); 
     var matrix:Matrix; 
     matrix = new Matrix(); 
     matrix.translate(-10, -10); 
     tt.graphics.beginBitmapFill(bmpImage, matrix, false, false); 
     tt.graphics.drawCircle(0, 0, this.radius) 
     tt.graphics.endFill(); 
     this.addChild(tt); 
    } 
} 

}

`

답변

2

당신은 방법으로 문제를 overcomplicated했습니다. 비트 맵 채우기는 일반적으로 넓은 영역을 타일 패턴으로 채우고 패턴이 비트 맵에서 오는 경우 (배경 생각하기)에는 여기에서 사용할 필요가 없습니다. 당신이해야 할 일은 Loader.content 비트 맵을 사용하는 것입니다. draw() 또는 행렬이 필요하지 않습니다. 충돌 탐지에 사용하는 원의 중심 인 경우 .x 및 .y를 사용하여 스프라이트의 점 (0,0)을 중심으로 돼지 비트 맵을 이동하면됩니다.

동그라미 기반 충돌 감지를 사용하기 위해 돼지 스프라이트가 시각적 원을 가질 이유가 없습니다. 시각적 인 표현은 충돌 감지에 전혀 영향을 미치지 않아야합니다. 서클 기반 충돌 감지는 피타고라스 거리 공식의 응용 프로그램 일뿐입니다. 즉, 센터 간의 거리가 테스트 할 원의 반지름의 합보다 작거나 같으면 겹치기 (충돌)합니다.

당신이와 마지막 기능을 대체하는 경우 :

당신의 bitmapData를 사용하면 32 비트 16 진수 값에 대한 제로 알파를 설정해야합니다 캔버스에 기능 알파 채널을하기 위해
private function picLoaded(event:Event):void 
{ 
    var pigPic:Bitmap = event.target.loader.content; 
    pigPic.x -= 10; 
    pigPic.y -= 10; 
    this.addChild(pigPic); 
} 
+0

코드를 추가해 주셔서 감사합니다. 나는 첫 번째 버전을보고 내가 생각할 수있는 모든 것을 시도했다. 나는 다음과 같은 것을 계속 시도했다 : var pigPic : Bitmap = pigLoader.content; 하지만 "암시 적 강제 변환"오류가 발생했습니다.그 pigLoader는 공공 장소 였으므로 어느 곳에서나 접근 할 수 있었지만 분명히 참조가 아닙니다. – tooshel

+0

돼지마다 이런 로더를 사용해야한다고 생각합니까? 그 부분을 꺼내서 돼지의 생성자에 "pigLoader.content"를 매개 변수로 전달하면 안됩니까? – tooshel

+0

내가하고있는 것처럼 개인적으로 각 돼지 인스턴스에 대해 새 인스턴스를로드하지 않습니다. 내가 할 일은 웹에서 한 번 GIF를로드하고 Loader의 전체 처리기에서 BitmapData (loader.content.bitmapData)에 대한 참조를 저장하는 것입니다. 비트 맵 데이터를 가져올 수있는 권한을 부여하기 위해 이미지를 제공하는 서버에 올바른 crossdomain.xml 정책 파일이 있으면이 작업을 수행 할 수 있습니다. 그런 다음 각 돼지 스프라이트를 구성 할 때 비트 맵 데이터 참조를 전달하고 새 Bitmap (비트 맵 데이터)을 내부적으로 수행하여 자식으로 첨부하는 비트 맵 표시 객체를 만듭니다. –

1

(0x00FFFFFF) 그리기 전에 BitmapData 객체의 fillColor 속성을 사용합니다. 0xFFFFFFFF의 기본값으로

package 
{ 
//Imports 
import flash.display.Sprite; 
import flash.display.Shape; 
import flash.display.Bitmap; 
import flash.display.BitmapData; 

//SWF Metadata Tag 
[SWF(width = "1000", height = "500", frameRate = "30", backgroundColor = "#000000")] 

//Class 
public class Test extends Sprite 
    { 
    //Constructor 
    public function Test() 
     {  
     var sh:Shape = new Shape(); 
     sh.graphics.beginFill(0xFF0000, 1.0); 
     sh.graphics.lineTo(200, 200); 
     sh.graphics.lineTo(0, 200); 
     sh.graphics.lineTo(0, 0); 
     sh.graphics.endFill(); 

     var shBitmapData:BitmapData = new BitmapData(sh.width, sh.height, true, 0x00FFFFFF); //32-bit Hex Value 
     shBitmapData.draw(sh); 

     addChild(new Bitmap(shBitmapData)); 
     } 
    } 
} 

스왑 그것을 그 차이를 볼 수 있습니다.