두 CanvasView 개체에서 onClickListener를 사용하는 방법은 무엇입니까?

pam45srv

사용자가 슈터를 클릭하면 위치가 바뀌고 쏘고 사용자가 슛한 공을 클릭하면 (또는 프로젝트에서 명명 된대로 쏘면) 사라지는 게임을 만들려고합니다. CODE HERE

Shooter.JAVA

public class shooter extends View {

       //Consider all variables are declared
        public shooter(int color, Context c) {
            super(c);
            paint = new Paint();
            paint.setColor(color);
            mContext = c;

        }
        public void move() {
           //Moves Cannon On Click (CODE NOT SHOWN PURPOSELY)  
            invalidate();
        }

        public float getPosition()
        {
            return shootPoint;
        }

        public void draw(Canvas canvas)
        {
            super.draw(canvas);
// simply draws a rectangle (shooter)
            cW=getWidth();
            cH=getHeight();
            center=new Point(cW/2,cH);
             left=0; right=center.x;  shootPoint=right/2;

            canvas.drawRect(left,top,right,bottom,paint);
        }
    }

shoot.java라는 또 다른 Java 클래스는 shootbutton을 클릭했을 때 슛 볼을 만들기 위해 존재하지만 사용자가 그 볼 (캔버스에 그린)을 클릭하면 재설정해야합니다.

메인 게임 뷰 클래스


public class GameView extends FrameLayout implements View.OnClickListener {
    //Consider all objects and variables are declared as used
    public GameView(Context context, AttributeSet attrs) {
        super(context,attrs);
        //CONTAIN INITIALIZATION OF OBJECTS AS USED  OF OTHER  CLASSES
        bullets = new ArrayList<shoot> ();
        addView(cannon);
        for (int i = 0; i < bullets.size(); i++ ) {
            addView(bullets.get(i));
            bullets.get(i).setOnClickListener(this);// an arrays of objects of shoot class 
        }
        cannon.setOnClickListener(this);
        level=3;level++;
    }

    @Override
    public void onClick(View view) {
       switch()//    Here is the MAIN PROBLEM HOW SHOULD I DIFFERENTIATE THAT CANNON IS CLICKED OR //BULLETS LIKE USING VIEW.GETTAG()
             {
              case ----1:// WHAT CASE SSHOULD I WRITE
              cannon.move();
              break;

              case ----2: // HERE ALSO
              bullets.remove();
              break;


             }
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        drawGameBoard(canvas);
        try
        {
            Thread.sleep(5);
        } catch (InterruptedException e) {
        }



        invalidate();
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);

        width = w;
        height = h;
        aliens.setBounds(0,0,width,height);
        for (int i = 0; i < bullets.size(); i++ ) {
            bullets.get(i).setBounds(0,0,width,height);

        }

    }

    public void drawGameBoard(Canvas canvas) {
        cannon.draw(canvas);
        for ( int i = bullets.size() - 1; i >= 0; i--) {
            if (bullets.get(i) != null) {
                bullets.get(i).draw(canvas);
             }
        }
        for (int i = explosions.size() - 1; i >= 0; i--) {
            if (explosions.get(i) != null) {
                if (!explosions.get(i).draw(canvas)) {
                    explosions.remove(i);
                }
            }
        }
           if (aliens != null) {
            aliens.draw(canvas);

            RectF guyRect = aliens.getRect();

            for (int i = bullets.size() - 1; i >= 0; i--) {
                if (RectF.intersects(guyRect, bullets.get(i).getRect())) {
                    explosions.add(new explosion(Color.RED,mContext, aliens.getX()-aliens.dst, aliens.getY()-aliens.dst));
                    aliens.reset();
                    bullets.remove(i);
                    break;
                }
            }
            if (!aliens.move()) {
                aliens = null;
            }
        }
    }
    // Whenever the user shoots a bullet, create a new bullet moving upwards
    public void shootCannon() {
        bullets.add(new shoot(Color.RED, mContext, cannon.getPosition(), (float) (height-100)));

    }
}

나는 GAMEVIEW.JAVA에서 재정의 된 기능 ONCLICK 인 문제가있는 코드의 일부를 클릭 한 내용을 아는 방법과 같은 주석을 통해 존경받는 기능을 수행하려면 내 질문을 이해하지 못하면 알려주십시오.

Shorxy

질문을 올바르게 이해했다면 하나의 onClickListener 함수를 사용하여 대포와 총알 모두에 대한 클릭 이벤트를 처리하고 싶습니다.

둘 다 다른 클래스이므로 '' 'instanceof' ''를 통해 구분할 수 있습니다.

즉, onClickListener가 다음과 같이 보일 것입니다.

@Override
public void onClick(View view) {

    if(view instanceof shooter) {
        cannon.move();
    }
    else if(view instanceof shoot) {
        bullets.remove();
    }
}

도움이 되었기를 바랍니다. 불분명 한 것이 남아 있으면 기꺼이 응답하겠습니다. :)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

pandas에서 두 개의 DataFrame으로 교체를 사용하는 방법은 무엇입니까?

분류에서Dev

Java에서 두 개체를 교환하는 방법은 무엇입니까?

분류에서Dev

factorygirls에서 id = user.id를 사용하여 개체 User를 만든 후 Freelancer와 User라는 두 개체를 만드는 방법은 무엇입니까?

분류에서Dev

자식 조각에서 OnClickListener를 사용하는 방법은 무엇입니까?

분류에서Dev

qt에서 두 개의 매개 변수와 함께 qDebug ()를 사용하는 방법은 무엇입니까?

분류에서Dev

pmd에서 하나의 규칙에 두 개의 AST 노드를 사용하는 방법은 무엇입니까?

분류에서Dev

nodejs에서 promise를 사용하여 두 개의 mysql 쿼리를 실행하는 방법은 무엇입니까?

분류에서Dev

CSS에서 두 개의 콘텐츠를 서로간에 사용하는 방법은 무엇입니까?

분류에서Dev

Google 차트에서 사용할 두 개의 키를 사용하여 JSON 객체를 JavaScript 배열로 변환하는 방법은 무엇입니까?

분류에서Dev

vb.net에서 두 개의 JSON 개체를 병합하는 방법은 무엇입니까?

분류에서Dev

xcode에서 서로 두 클래스의 객체를 사용하는 방법은 무엇입니까?

분류에서Dev

Windows 7에서 두 개의 오디오 장치를 동시에 사용하는 방법은 무엇입니까?

분류에서Dev

로그 파일에서 rex를 사용하여 두 개의 필드를 얻는 방법은 무엇입니까?

분류에서Dev

pyspark에서 두 개의 열과 함께 date_add를 사용하는 방법은 무엇입니까?

분류에서Dev

두 개의 for 루프에서 break를 사용하는 방법은 무엇입니까?

분류에서Dev

TensorFlow에서 두 개의 네트워크를 함께 사용하는 방법은 무엇입니까?

분류에서Dev

두 개 이상의 반복 된 : punct : 파이썬에서 re를 사용하는 방법은 무엇입니까?

분류에서Dev

데이터 흐름 verilog에서 두 개의 벡터를 사용하는 방법은 무엇입니까?

분류에서Dev

scanner.nextDouble ()에서 두 개의 구분자를 사용하는 방법은 무엇입니까? 자바

분류에서Dev

Pentaho Report Designer에서 두 개 이상의 쿼리를 사용하는 방법은 무엇입니까?

분류에서Dev

if 문을 사용하여 r에서 두 개의 변수를 증가시키는 방법은 무엇입니까?

분류에서Dev

TFlearn에서 두 개의 네트를 사용하는 방법은 무엇입니까?

분류에서Dev

Inno Setup에서 두 개의 사용자 정의 페이지를 추가하는 방법은 무엇입니까?

분류에서Dev

jquery를 사용하여 두 개의 테이블 체크 체크 박스 값에서 얻는 방법은 무엇입니까?

분류에서Dev

한 프로젝트에서 두 스토리 보드 사이에 개체를 사용자 지정하는 방법은 무엇입니까?

분류에서Dev

Underscore 또는 Lodash를 사용하지 않고 자바 스크립트에서 두 개의 객체 배열을 결합하는 방법은 무엇입니까?

분류에서Dev

typescript에서 두 개의 배열 객체를 동적으로 병합하는 방법은 무엇입니까?

분류에서Dev

두 문자열 개체 목록에서 AutoCompleteTextView를 바인딩하는 방법은 무엇입니까?

분류에서Dev

JavaScript에서 두 개체를 배열 속성과 연결하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    pandas에서 두 개의 DataFrame으로 교체를 사용하는 방법은 무엇입니까?

  2. 2

    Java에서 두 개체를 교환하는 방법은 무엇입니까?

  3. 3

    factorygirls에서 id = user.id를 사용하여 개체 User를 만든 후 Freelancer와 User라는 두 개체를 만드는 방법은 무엇입니까?

  4. 4

    자식 조각에서 OnClickListener를 사용하는 방법은 무엇입니까?

  5. 5

    qt에서 두 개의 매개 변수와 함께 qDebug ()를 사용하는 방법은 무엇입니까?

  6. 6

    pmd에서 하나의 규칙에 두 개의 AST 노드를 사용하는 방법은 무엇입니까?

  7. 7

    nodejs에서 promise를 사용하여 두 개의 mysql 쿼리를 실행하는 방법은 무엇입니까?

  8. 8

    CSS에서 두 개의 콘텐츠를 서로간에 사용하는 방법은 무엇입니까?

  9. 9

    Google 차트에서 사용할 두 개의 키를 사용하여 JSON 객체를 JavaScript 배열로 변환하는 방법은 무엇입니까?

  10. 10

    vb.net에서 두 개의 JSON 개체를 병합하는 방법은 무엇입니까?

  11. 11

    xcode에서 서로 두 클래스의 객체를 사용하는 방법은 무엇입니까?

  12. 12

    Windows 7에서 두 개의 오디오 장치를 동시에 사용하는 방법은 무엇입니까?

  13. 13

    로그 파일에서 rex를 사용하여 두 개의 필드를 얻는 방법은 무엇입니까?

  14. 14

    pyspark에서 두 개의 열과 함께 date_add를 사용하는 방법은 무엇입니까?

  15. 15

    두 개의 for 루프에서 break를 사용하는 방법은 무엇입니까?

  16. 16

    TensorFlow에서 두 개의 네트워크를 함께 사용하는 방법은 무엇입니까?

  17. 17

    두 개 이상의 반복 된 : punct : 파이썬에서 re를 사용하는 방법은 무엇입니까?

  18. 18

    데이터 흐름 verilog에서 두 개의 벡터를 사용하는 방법은 무엇입니까?

  19. 19

    scanner.nextDouble ()에서 두 개의 구분자를 사용하는 방법은 무엇입니까? 자바

  20. 20

    Pentaho Report Designer에서 두 개 이상의 쿼리를 사용하는 방법은 무엇입니까?

  21. 21

    if 문을 사용하여 r에서 두 개의 변수를 증가시키는 방법은 무엇입니까?

  22. 22

    TFlearn에서 두 개의 네트를 사용하는 방법은 무엇입니까?

  23. 23

    Inno Setup에서 두 개의 사용자 정의 페이지를 추가하는 방법은 무엇입니까?

  24. 24

    jquery를 사용하여 두 개의 테이블 체크 체크 박스 값에서 얻는 방법은 무엇입니까?

  25. 25

    한 프로젝트에서 두 스토리 보드 사이에 개체를 사용자 지정하는 방법은 무엇입니까?

  26. 26

    Underscore 또는 Lodash를 사용하지 않고 자바 스크립트에서 두 개의 객체 배열을 결합하는 방법은 무엇입니까?

  27. 27

    typescript에서 두 개의 배열 객체를 동적으로 병합하는 방법은 무엇입니까?

  28. 28

    두 문자열 개체 목록에서 AutoCompleteTextView를 바인딩하는 방법은 무엇입니까?

  29. 29

    JavaScript에서 두 개체를 배열 속성과 연결하는 방법은 무엇입니까?

뜨겁다태그

보관