2015-11-13 66 views
0

我做了一个简单的游戏,每当我的对象到达屏幕结尾时,当前活动停止,另一个活动开始。如何在没有按钮点击的情况下从其他活动开始新的活动android

我已经创建了一个简单的布尔方法collisionDetection()它检查一个对象是否在屏幕的末尾。但是,我不知道我应该在哪里使用该方法collisionDetection()

我应该在onResume上检查碰撞吗?当发现碰撞时,如何启动另一个活动并停止主活动?

我对第一个活动

public class ZmijicaCrtanje extends AppCompatActivity implements View.OnTouchListener{ 

ZmijicaSV zmija; 
private static int score=0; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    zmija=new ZmijicaSV(this); 
    zmija.setOnTouchListener(this); 
    setContentView(zmija); 

} 

@Override 
protected void onPause() { 
    super.onPause(); 
    zmija.pause(); 
    } 


@Override 
protected void onResume() { 
    super.onResume(); 
    zmija.resume(); 

} 



@Override 
public boolean onTouch(View v, MotionEvent event) { 

    boolean up=zmija.sp.isUp(); 
    boolean right=zmija.sp.isRight(); 
    boolean down=zmija.sp.isDown(); 
    boolean left=zmija.sp.isLeft(); 


    switch(event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 

      if(up) { 
       zmija.sp.setUp(false); 
       zmija.sp.setRight(true); 
       update(); 
       break; 
      } 

      if(right) { 
       zmija.sp.setRight(false); 
       zmija.sp.setDown(true); 
       update(); 
       break; 
      } 

      if(down) { 
       zmija.sp.setDown(false); 
       zmija.sp.setLeft(true); 
       update(); 
       break; 
      } 
      if(left) { 
       zmija.sp.setLeft(false); 
       zmija.sp.setUp(true); 
       update(); 
      break; 
     } 


    } 
     return true; 
    } 

public void update() 
{ 
    score++; 
} 
public int getScore() 
{ 
    return score; 
} 

} 

公共类ZmijicaSV类继承SurfaceView实现Runnable {

private boolean Collision; 
Thread t=null; 
Pravougaonik pr; 
SurfaceHolder holder; 
boolean isRunning=false; 
SnakeParts sp; 
ZmijicaCrtanje zc; 
public ZmijicaSV(Context context) { 
    super(context); 
    holder=getHolder(); 
    pr=new Pravougaonik(context); 
    sp=new SnakeParts(); 
    zc=new ZmijicaCrtanje(); 
    Collision=false; 
} 

public void run() 
{ 
    Paint p=new Paint(); 
    p.setColor(Color.BLUE); 
    p.setStyle(Paint.Style.FILL); 
    while(isRunning) 
    { 

     if(!holder.getSurface().isValid()) { 
      continue; 
     } 
     Canvas c=holder.lockCanvas(); 
     c.drawColor(Color.BLACK); 
     sp.Draw(c); 
     pr.onDraw(c); 
     sp.update(); 
     drawText(c); 
     holder.unlockCanvasAndPost(c); 

     try { 

      t.sleep(50); 

     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

public void resume() 
{ 
    isRunning=true; 
    t=new Thread(this); 
    t.start(); 
} 

public void pause() 
{ 
    isRunning=false; 
    while(true) 
    { 
     try { 
      t.join(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     break; 
    } 
    t=null; 

} 

public void drawText(Canvas canvas) 
{ 
    Paint paint=new Paint(); 
    paint.setColor(Color.WHITE); 
    paint.setTextSize(50); 
    paint.setTypeface(Typeface.create(Typeface.DEFAULT,Typeface.BOLD)); 
    canvas.drawText("Score:"+zc.getScore(),getWidth()-230,getHeight()-25,paint); 
} 

public boolean checkCollision() 
{ 
    if((sp.getHeadX()<-1)||(sp.getHeadX()>getWidth())||(sp.getHeadY()>getHeight())||(sp.getHeadY()<-1)) 
     Collision=true; 
    return Collision; 
} 

}

回答

0

collisionDetection()方法在public void update()方法类似

public void update() 
{ 
    score++; 
    collisionDetection(); 
} 

而且在collisionDetection()检测collition时意图

Intent next=new Intent(this.class,your_class_for_secondactivity.class); 
startActivity(next); 
+0

只是尝试了......它的工作原理...好后援问题的一部分,新的活动开始启动下一个活动只有当我点击屏幕(假设对象已经在屏幕边缘)。我想要它立即开始新的活动,一旦对象与屏幕结束碰撞,而不必执行点击操作。问题出在更新()方法,因为它只是在onTouch方法中调用的。对此的任何可能的修复?还应该在哪里调用update()? 编辑:一旦主要活动开始后,对象会不断移动到屏幕的右边缘 – igorcar1994

+0

即使您未触摸屏幕,您的物体是否也能达到最终?我看到物体移动,当你触摸它@ igorcar1994 –

+0

我的道歉,如果我没有正确解释。类ZmijicaSV使用SurfaceView,我创建了一个简单的矩形。它也有简单的线程,它更新它的x坐标。 ,即使我没有触摸屏幕,对象也在不停地移动。我正在使用OnTouch方法进行其他操作。 – igorcar1994

相关问题