2010-05-04 5 views
0

SpriteGraphics 개체에 단순히 그려주는 AS3 코드에 문제가 있습니다. 그림은 stageENTER_FRAME 이벤트마다 호출되는 큰 프로 시저의 일부로 발생합니다.드로잉 라인 그래픽은 플래시를 나선형으로 제어 불능 상태로 만듭니다!

플래시가 충돌하거나 오류를 반환하지 않습니다. 대신 CPU를 100 % 가동하고 모든 메모리를 가져옵니다. 프로세스를 수동으로 종료하거나 컴퓨터가 최대 2-3GB까지 올라갈 때 압력을 받으면 컴퓨터가 흔들립니다. 이것은 임의의 시간에 일어나고 사전에 아무런 감속이 없다.

WTF? 이걸 본 사람 있어요?

추 신 : MOUSE_MOVE 이벤트 핸들러 내에서 드로잉을하곤했는데,이 문제는 더 빨리 발생했습니다.

PPS : Linux에서 개발 중이지만 Windows에서 동일한 문제가 재현되었습니다.

업데이트 : 일부 코드를 요청 했으므로 여기에 있습니다. (m_graphicsLayerSprite이다)

public static function drawDashedLine(i_graphics : Graphics, i_from : Point, i_to : Point, i_on : Number, i_off : Number) : void 
{ 
    const vecLength : Number = Point.distance(i_from, i_to); 

    i_graphics.moveTo(i_from.x, i_from.y); 

    var dist : Number = 0; 
    var lineIsOn : Boolean = true; 
    while(dist < vecLength) 
    { 
     dist = Math.min(vecLength, dist + (lineIsOn ? i_on : i_off)); 
     const p : Point = Point.interpolate(i_from, i_to, 1 - dist/vecLength); 
     if(lineIsOn) i_graphics.lineTo(p.x, p.y); 
     else i_graphics.moveTo(p.x, p.y); 

     lineIsOn = !lineIsOn; 
    } 
} 

과 같이 호출 : 드로잉 함수는 다음과 같다

m_graphicsLayer.graphics.clear(); 
if (m_destinationPoint) 
{ 
    m_graphicsLayer.graphics.lineStyle(2, m_fixedAim ? 0xff0000 : 0x333333, 1); 
    drawDashedLine(m_graphicsLayer.graphics, m_initialPos, m_destinationPoint, 10, 10); 
} 
+0

당신은 우리에게 몇 가지 코드를 보여 주면서 시작할 수 있습니다 :) –

+1

예, 코드를 보여주세요. 어딘가에 무한 루프가있는 것처럼 들립니다. – CookieOfFortune

+0

네가 enterframe이나 마우스 이벤트에서 드로잉 명령을 실행하기 시작하면 효율적으로 일을 처리하지 않으면 각 반복이 다음 발사와 충돌하기 시작할 수있다. – liquidleaf

답변

0

동안이 항상 인수를 작성할 때 안정적으로 예측할 수 계산에서 오는 특히, 디버깅, 코드 검토 중에 붉은 깃발로 뛰어해야

(DIST < vecLength) 코드 또는 값이 Point.distance() 또는 Math.min()과 같이 엄격한 상한을 갖지 않음).

여러 번 물 렸습니다. :-)

+0

맞습니다. 그럼에도 불구하고, 왜 이런 식으로 플래시를하고,이 모든 기억을 움켜 잡고 결코 풀어주지 않습니까? – drpepper

+0

아마도이 메서드는 각 반복마다 더 많은 리소스를 할당하는 무한 루프에 갇혀 있고 다시 해제하지 않기 때문일 수 있습니다. 프로세스가 고장 나기 전 까진 계속됩니다. – jpop

0

그럼 CookieOfFortune 중 하나 그 경우 무한 루프가 있었다 우측이었다 끝점은 무한대였습니다 (어떤 일이 일어나지 않았 음)

당신의 도움에 감사드립니다.

관련 문제