Q&A

  • For~Loop의 최적화 ?....도움좀 주세염...
이문장이 있거든여..

근데 이문장은 1초에 70번정도 호출 됩니다..

근데 for~Loop을 돌리니깐 여간 느린게 아닙니다...



게임이서 화면상의 특정 위치에 칼라 인덱스을 읽어 그걸 미리 정의된

칼라인덱스(ATable)에 맞게 수정 하는 겁니다..



근데 이문장땜에 프레임이 20정도가 낮아 집니다.



달리 방도가 없을 까여?



type

PAByte = array of Byte;

var

ATable : array [0..255, 0..255] of byte;



procedure aa;

begin

for y := YPos to (YPos + ImgWidth) - 1 do

begin

for x := XPos to (XPos + ImgWidth) - 1 do

begin

PAByte(Source)[y * ddsd.lPitch + x] :=

ATable[PAByte(Source)[y * ddsd.lPitch + x],

PAByte(Target)[(y - YPos) * ddsd1.lPitch +

((x - XPos) + (ImgWidth * index))]];

end;

end;

end;





1  COMMENTS
  • Profile
    타락천사 2000.08.02 05:35
    안녕하세여..타락임다...^^



    1초에 70번 정도면 아래와 가치 최적화 하면 될거 가튼데여...



    type

    PAByte = array of Byte;

    var

    ATable : array [0..255, 0..255] of byte;



    procedure aa;

    var

    mX, mY : Byte;

    begin

    mX := XPos + ImgWidth - 1;

    mY := YPos + ImgWidth - 1;

    for y := YPos to mY do

    begin

    for x := XPos to mX do

    begin

    PAByte(Source)[y * ddsd.lPitch + x] :=

    ATable[PAByte(Source)[y * ddsd.lPitch + x],

    PAByte(Target)[(y - YPos) * ddsd1.lPitch +

    ((x - XPos) + (ImgWidth * index))]];

    end;

    end;

    end;



    해놓은거 보면 쉽져? ^^



    "최적화" 라는 내용만 다룬 책들이 많이 있어여...



    꼭 필요하면, 함 사보세여..^^



    타락천사...