Java 如何在android中从另一个活动开始新活动,而无需单击按钮

Java 如何在android中从另一个活动开始新活动,而无需单击按钮,java,android,Java,Android,我做了一个简单的游戏,每当我的目标到达屏幕的尽头,当前活动停止,另一个活动开始 我创建了一个简单的布尔方法,名为collisionDetection(),用于检查对象是否击中屏幕的末端。但是,我不知道应该在哪里使用该方法collisionDetection() 我应该在onResume上检查碰撞吗?当检测到碰撞时,如何启动另一个活动并停止主活动 第一次活动的我的班级 public class ZmijicaCrtanje extends AppCompatActivity implements

我做了一个简单的游戏,每当我的目标到达屏幕的尽头,当前活动停止,另一个活动开始

我创建了一个简单的布尔方法,名为
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;
}
私有布尔冲突;
线程t=null;
Pravougaonik公共关系;
表面焊钳;
布尔值isRunning=false;
蛇蝎;
Zmijicacranje zc;
公共ZmijicaSV(上下文){
超级(上下文);
holder=getHolder();
pr=新的Pravougaonik(上下文);
sp=新的蛇形零件();
zc=新的Zmijicacranje();
冲突=错误;
}
公开募捐
{
油漆p=新油漆();
p、 setColor(Color.BLUE);
p、 设置样式(油漆、样式、填充);
同时(正在运行)
{
如果(!holder.getSurface().isValid()){
继续;
}
Canvas c=holder.lockCanvas();
c、 drawColor(颜色:黑色);
sp.Draw(c);
pr.onDraw(c);
sp.update();
抽签文本(c);
支架。解锁帆布吊杆(c);
试一试{
t、 睡眠(50);
}捕捉(中断异常e){
e、 printStackTrace();
}
}
}
公众简历()
{
isRunning=true;
t=新螺纹(本螺纹);
t、 start();
}
公共空间暂停()
{
isRunning=false;
while(true)
{
试一试{
t、 join();
}捕捉(中断异常e){
e、 printStackTrace();
}
打破
}
t=零;
}
公共void drawText(画布)
{
油漆=新油漆();
油漆。设置颜色(颜色。白色);
油漆.尺寸(50);
paint.setTypeface(Typeface.create(Typeface.DEFAULT,Typeface.BOLD));
canvas.drawText(“分数:+zc.getScore(),getWidth()-230,getHeight()-25,绘制);
}
公共布尔校验冲突()
{

如果((sp.getHeadX()getWidth())| |(sp.getHeadY()>getHeight())| |(sp.getHeadY()将
collisionDetection()
方法放入
public void update()
方法中,如

 public void update()
 {
   score++;
   collisionDetection();
 }
当在
collisionDetection()
中检测到冲突时,通过意图启动下一个活动

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

刚刚尝试过…它工作了…很好。问题是,新活动只有在我单击屏幕时才开始(假设对象已经撞到屏幕边缘)。我想让它在对象与屏幕末端发生碰撞时立即启动新活动,而无需我执行单击操作。问题在于更新()方法,因为它仅在onTouch方法中调用。对此有任何可能的修复吗?应该在哪里更新()也可以调用?编辑:一旦主要活动开始,对象会不断移动到屏幕的右边缘即使你没有触摸屏幕,你的对象也能到达终点吗?我看到对象在你触摸它时移动@igorcar1994My如果我没有正确解释,我深表歉意。类ZmijicaSV正在使用SurfaceView,我已经创建了一个简单的e矩形。它还有一个简单的线程,可以更新它的x坐标。因此,即使我不触摸屏幕,对象也在不断移动。我正在使用OnTouch方法处理其他事情。请将线程包括在您的问题中。据我所知,现在您应该检测线程的碰撞。@igorcar1994