2012-02-17 3 views
0

저는 Android 개발시 초보자입니다.비트 맵 게임 개체의 여러 인스턴스 구현

나는 게임을 만들었습니다. 하나의 비트 맵 (1)은 제어 가능하고 다른 비트 맵 (2)은 첫 번째 비트 맵과의 충돌시 작동합니다. 잘 작동합니다. 문제 ; 어떻게 (2)의 인스턴스를 여러 개 만들면 같은 방법으로 (1)과의 충돌에 모두 응답 할 것입니다.

내가 지금까지 작성한 내용. MainGamePanel에서

, 나는 두 개의 비트 맵을 만듭니다

basket = new basket(BitmapFactory.decodeResource(getResources(), R.drawable.basket01), 50, 50); 
    apple = new apple(BitmapFactory.decodeResource(getResources(), R.drawable.apple_red01)); 

MainThread가 업데이트를 수행하고 (나는 사이의 충돌 검사 (MainGamePanel에서) 업데이트에서 패널

에 캔버스를 그립니다 1) 및 (2) 좌표를 확인하십시오.

충돌이 감지되면 apple (2)에 좌표를 설정하면 슬롯이 지정됩니다.

그러면 apple (2)가 슬롯에 닿아 있고 터치 된 경우이를 화면의 임의 위치로 이동하고 부울 슬롯을 false로 설정합니다. 나는 붙어,이 개 질문은 (내가 SO에 여기를 분할해야합니까?)하고있어 어디

...이입니다

  1. 가 어떻게 비트 맵 (2)의 여러 인스턴스를 만들까요?
  2. 캔버스의 X 및 Y 최대 값은 어떻게 얻습니까? 아니면 클래스 자체에서 생성되지 않은 뷰는 어떻게됩니까?

고마워요! 비트 맵 (2) "사과"에 대한

현재 코드 조각 : 두 (리뷰 난수 생성기를, 내가 최대 값을 설정해야합니다) 질문에 관해서

 public void draw(Canvas canvas) { 
    canvas.drawBitmap(bitmap, X - width/2, Y - height/2, null); 
} 

;

if (slotted){ 
    if (eventX >= (X - width/ 2) && (eventX <= (X + width/2))) { 
      if (eventY >= (Y - height/ 2) && (eventY <= (Y + height/ 2))) { 
    // basket touch 
    Random Rnd = new Random(); 

    float nX=Rnd.nextInt(HOWTOMAXOFVIEWORCANVAS); 
    float nY=Rnd.nextInt(HOWTOMAXOFVIEWORCANVAS)+80; 

// the +80 is to prevent the apple from returning in the 'slotted' area (the basket can't get there ;) 

    setX(nX); 
    setY(nY); 
    slotted = false; 

답변

1

아주 간단한 방법 대신 별도의 사과 인스턴스의 사과 list을 생성하는 것입니다 :

ArrayList<apple> appleList = new ArrayList<apple>(); 
int nApples = 5; 
for (int i=0; i<5; i++) 
     appleList.add(new apple(); 

당신은 비트 맵의 ​​여러 인스턴스를 만들 싶지 않아요. 비트 맵은 픽셀 당 4 바이트의 많은 메모리를 소비 할 수 있습니다. 비트 맵을 한 번만 생성 한 다음 사과 객체가 해당 비트 맵을 직접 참조하게하면 여러 번 좋을 것입니다.

캔버스의 최대 X 및 Y 값은 사용자가 그리는 View의 크기에 의해 결정됩니다. View이 팽창되어 그려지면 뷰에서 해당 값을 가져올 수 있어야합니다.

+0

viewsize와 관련하여; public int sizeY = getHeight();를 추가하려고했습니다. MainGamePanel (SurfaceView 확장). 그러나 Apple 클래스에서 MainGamePanel.sizeY를 호출하면 정적 및 비 정적 참조에 대한 오류가 발생합니다. getDefaultSize 메소드도별로 도움이되지 않습니다. SurfaceView의 치수를 다른 클래스에 구현하는 방법에 대해 자세히 설명해 주시겠습니까? –

+0

답장을 보내 주시면 제 질문 2를 해결했습니다. MainGamePanel에서 public static int width를 만들었습니다.나중에 캔버스가 그려져 있다고 확신하면 width = getWidth();와 같이 채 웁니다. 그런 다음 다른 클래스에서 MainGamePanel.width에 액세스 할 수 있습니다! 감사! –

+0

당신의 대답 덕분에, 나는 내 질문 1을 해결했다. 'for (int i = 0; i <7; i ++) { \t apple nextApple = 새로운 사과 (BitmapFactory.decodeResource (getResources(), R.drawable.apple_red01)); \t AppleList.add (nextApple); \t} '배열의 위치에 따라 다른 사과에 액세스 할 수 있습니다. 감사합니다. 투표하기. –