2011-03-19 2 views
0

안드로이드에서 쉬프트 연산자를 사용할 수 있는지 궁금했는데 시도 할 때 구문 오류가 발생했습니다. 운영자는 >> < < >>>입니다. 그것이 자신의 안드로이드 SDK가 해당하는 지원하지 않는 경우?안드로이드의 쉬프트 연산자 구문 오류

편집 : 여기에 내가 사용하는 코드가 있습니다. 픽셀 당 충돌 감지를 시도하고이를 시도하고 있습니다.

public void getBitmapData(Bitmap bitmap1, Bitmap bitmap2){ 
    int[] bitmap1Pixels; 
    int[] bitmap2Pixels;

int bitmap1Height = bitmap1.getHeight(); int bitmap1Width = bitmap1.getWidth(); int bitmap2Height = bitmap1.getHeight(); int bitmap2Width = bitmap1.getWidth(); bitmap1Pixels = new int[bitmap1Height * bitmap1Width]; bitmap2Pixels = new int[bitmap2Height * bitmap2Width]; bitmap1.getPixels(bitmap1Pixels, 0, bitmap1Width, 1, 1, bitmap1Width - 1, bitmap1Height - 1); bitmap2.getPixels(bitmap2Pixels, 0, bitmap2Width, 1, 1, bitmap2Width - 1, bitmap2Height - 1); // Find the first line where the two sprites might overlap int linePlayer, lineEnemy; if (ninja.getY() <= enemy.getY()) { linePlayer = enemy.getY() - ninja.getY(); lineEnemy = 0; } else { linePlayer = 0; lineEnemy = ninja.getY() - enemy.getY(); } int line = Math.max(linePlayer, lineEnemy); // Get the shift between the two int x = ninja.getX() - enemy.getX(); int maxLines = Math.max(bitmap1Height, bitmap2Height); for (; line <= maxLines; line ++) { // if width > 32, then you need a second loop here long playerMask = bitmap1Pixels[linePlayer]; long enemyMask = bitmap2Pixels[lineEnemy]; // Reproduce the shift between the two sprites if (x < 0) playerMask << (-x); else enemyMask << x; // If the two masks have common bits, binary AND will return != 0 if ((playerMask & enemyMask) != 0) { // Contact! Log.d("pixel collsion","we have pixel on pixel"); } } }
+2

예, 할 수 있습니다. 작동하지 않는 코드를 게시하십시오. 우리는 실제로 다른 방법으로 도움을 줄 수 없습니다. – fredley

+0

원래 코드를 내 코드로 편집했습니다. 죄송합니다 – pengume

답변

1

Android는 비트 연산을 지원합니다. Here's a handy guide.

+0

위의 코드를 게시했습니다. 왜 그것이 작동하지 않는지 확실하지 않을 수도 있습니다. – pengume

2

당신은 괄호에있는 산술 연산을 넣어하지 않는 한 오류가 발생합니다 문자열로 추가하는 경우 :


[email protected]:/tmp$ cat test.java 
public class test { 
public static void main(String args[]) { 
    int test = 42; 
    System.out.println("" + (test >> 1) + ", " + (test << 1) + ", " + (test >>> 1)); 
} 
} 
[email protected]:/tmp$ java test 
21, 84, 21