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