2009-05-17 2 views
0

은을 heres 임 지금타일은 movment를

if (osl_keys->held.down) 
{ 
sprite_position = DOWN; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->y += 16; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->y += 16; 
} 
if (osl_keys->held.up) 
{ 
sprite_position = UP; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->y -= 16; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->y -= 16; 
} 
if (osl_keys->held.right) 
{ 
sprite_position = RIGHT; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->x += 16; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->x += 16; 
} 
if (osl_keys->held.left) 
{ 
sprite_position = LEFT; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->x -= 16; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->x -= 16; 
} 
sceKernelDelayThread(750000); 

작업 무엇을 나는 difinantly 각 스프라이트가 lokiare1 는 여전히 확인해야

에 의해 32 × 32 그래서 충돌이 더 aplicable 일 수 있습니다하기로 결정했습니다 타일 ​​ 과 충돌합니다. 충돌을 수행하는 가장 철저한 방법은 다음과 을 충돌 한 스프라이트에 포인터를 반환, 의 다른 모든 픽셀마다 다른 스프라이트에 대한 스프라이트의 각 눈에 보이는 픽셀의 위치를 확인하는 것입니다. 이것은 매우 느릴 것입니다. 필자가 설명하는 메서드는 느린 작업 충돌 감지 인 이어야합니다. 내가 틀렸다면 이 맞는지 말해주세요. 내가 앉아 밤의 몇 가지 양을 보냈습니다 (내가 임의 뭔가 홉 그나마 그런 식으로 그것을 밖으로 시도하기 전에 나는 확실히 일들이 내 머리에서 작동하도록 좋아)

내가 문제가 상상 데 부분입니다 샤워를 할 때 어떤 방법이 있는지 생각해보고 싶습니다. 뭔가가 있었는지 확인하려고합니다.

저는 타일이 x, y가 솔리드가되도록 솔리드 오브젝트가 앞으로 오면 움직이지 않습니다. 임 작동 중입니다. 내 게시물에서.>

if (osl_keys->held.down) 
{ 
if (y+1 == bush=>y) 
{ 
sprite_march = 4; 
SpriteAnimate(); 
else 
{ 
sprite_position = DOWN; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->y += 16; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->y += 16; 
} 

그런데 다시 어떻게하면 (y + 1 == 솔리드) 묻는 방법으로 코드 길이를 줄일 수 있습니까?

답변

1

이것은 일반적인 대답이 아니라 일반적인 스타일 참고입니다. 코드가 반복적 인 것을 알 수 있습니까? 이 때문에. 코드의 첫 번째 게시물을 많이 단축 할 수 있습니다.

int down_direction = 0, right_direction = 0; 
if (osl_keys->held.down) 
{ 
    down_direction = 16; 
    sprite_position = DOWN; 
} 
else if (osl_keys->held.up) 
{ 
    down_direction = -16; 
    sprite_position = UP; 
} 
else if (osl_keys->held.right) 
{ 
    right_direction = 16; 
    sprite_position = RIGHT; 
} 
else if (osl_keys->held.left) 
{ 
    right_direction = -16; 
    sprite_position = LEFT; 
} 

for (int i = 0; i < 2; ++i) 
{ 
    SpriteAnimate(); 
    sceKernelDelayThread(20000); 
    sprite->x += right_direction; 
    sprite->y += down_direction; 
} 
sceKernelDelayThread(750000); 

저기,별로 좋지 않나요?

질문에 답하려면 스프라이트의 픽셀 위치를 추적하고 싶지는 않습니다. 행 및 열 위치를 추적하려고합니다. 그런 다음 대상 타일이 단단한 경우 이동하기 전에 옆을 확인하십시오.

+0

그게 뭔지 알아 내려고하지만 그게 내 자신에 의해 정수를 이해 못해. –

관련 문제