내가 디버그 플레이어의 '쇼 업데이트 지역'기능을 사용하여 BitmapData.drawAS3 stagesized 비트 맵 업데이트 지역
를 사용하여 stageSized 비트 맵에 그리기있어 프로젝트가, 나는 플레이어 것을 알 수 있습니다 비트 맵 데이터의 작은 부분 만 변경했지만 항상 전체 스테이지를 업데이트합니다.
어떻게하면 플레이어가 비트 맵 데이터가 변경된 부분의 화면 만 업데이트하도록 할 수 있습니까?
내가 디버그 플레이어의 '쇼 업데이트 지역'기능을 사용하여 BitmapData.drawAS3 stagesized 비트 맵 업데이트 지역
를 사용하여 stageSized 비트 맵에 그리기있어 프로젝트가, 나는 플레이어 것을 알 수 있습니다 비트 맵 데이터의 작은 부분 만 변경했지만 항상 전체 스테이지를 업데이트합니다.
어떻게하면 플레이어가 비트 맵 데이터가 변경된 부분의 화면 만 업데이트하도록 할 수 있습니까?
비트 맵의 일부만 다시 그리는 경우 Flash Player에서 해당 부분 만 업데이트해야합니다.
public class Test extends Sprite
{
public function Test()
{
stage.align = "topLeft";
stage.scaleMode = "noScale";
var bitmap:Bitmap = new Bitmap();
addChild(bitmap);
var bd:BitmapData = new BitmapData(400, 400);
bitmap.bitmapData = bd;
// One-second timer.
var timer:Timer = new Timer(1000);
timer.start();
timer.addEventListener("timer", timerHandler);
}
private function timerHandler(event:Event):void
{
var bitmap:Bitmap = Bitmap(getChildAt(0));
var bd:BitmapData = bitmap.bitmapData;
// Draw 100x100 square in random location, with random color.
var xPos:Number = Math.random() * 300;
var yPos:Number = Math.random() * 300;
var matrix:Matrix = new Matrix(1, 0, 0, 1, xPos, yPos);
var color:uint = Math.round(Math.random() * 0xFFFFFF) | 0xFF000000;
var colorTransform:ColorTransform = new ColorTransform();
colorTransform.color = color;
var shape:Shape = new Shape();
var g:Graphics = shape.graphics;
g.beginFill(0xFFFFFF);
g.drawRect(0, 0, 100, 100);
g.endFill();
bd.draw(shape, matrix, colorTransform);
}
}
독립형 Flash Player에서 "다시 그리기 영역 표시"로이 시도하고 당신은 각 틱에만 새로 그려 부분을 업데이트 볼 수 있습니다 :
현재 작업에서 볼 수 있습니다.
테스트에서 BitmapData.draw 메소드를 사용하고 있지 않습니다. 그게 대상 비트 맵의 임의의 크기 영역을 변경할 수 있기 때문에 FP는 다시 그리기를 결정하는 데 어려움이 있습니다. –
draw()를 사용하도록 코드를 업데이트했습니다. 아직도 작동합니다. 나는 네가 네 문제를 해결 한 것을 본다. – Manish
대신 copyPixels를 사용할 수 있습니까? 다른 BitmapData에서 복사 만 할 수 있지만 대부분의 경우 괜찮습니다. (애니메이션을 비트 맵 데이터로 한 번 캐시 한 다음 Draw-method 대신 캐시 된 데이터를 사용할 수 있습니다.) FlashPlayer는 copyPixels를 사용할 때 변경된 부분 만 다시 그릴 수 있어야합니다.
그러나 실제 질문은; 이게 진짜 문제 야? 실제로 필요하지 않는 한 이러한 것들을 최적화하지 마십시오.
변환 행렬을 적용하므로 그리기가 필요합니다. 그리고 네, 중요한 성과를 올렸습니다. 이미지를 여러 개의 작은 그리드로 분할하면 성능이 10 배 향상됩니다 (그러나이 메서드를 사용하여 매우 이상한 그래픽 결함이 발생하는 순간) – Mat
몇 가지 비트 맵으로 분할해야합니다. 그 정상은 당신이 draw 함수를 사용한다면 다시 전체 객체를 칠한다는 것을 의미합니다. – turbosqel
지금 당장이 작업을하고 있지만 훨씬 빠릅니다. 그러나 설명 할 수없는 매우 이상한 그래픽 결함이 발생합니다. 페인팅하는 동안 비트 맵의 작은 부분 만 실제로 화면에 그려집니다. 비트 맵 데이터에 비트 맵 데이터를 올바르게 추가했음을 알 수 있지만, 일부는 화면에 표시되지 않습니다. – Mat
좋습니다 - 이제 작동 중입니다. 무승부를 사용하기 전에 bitmapdatas를 잠근 다음 잠금 해제를 호출하면 이상한 결함이 발생하지 않습니다. 지금은 빠르다 =) – Mat