Android 线的星形触觉

Android 线的星形触觉,android,multithreading,Android,Multithreading,这是我的代码: package gal.doron.ballinthehole; import android.content.Intent; public class BallMover extends Thread { private Ball[] balls; private Paddle paddle; private GameLevels levels; private GameView gameview;

这是我的代码:

package gal.doron.ballinthehole;

import android.content.Intent;
public class BallMover extends Thread
{
        private Ball[] balls;
        private Paddle paddle;
        private GameLevels levels;
        private GameView gameview;
        private enum Directions {Top, Right, Bottom, Left, None};
        public BallMover(Ball[] b, Paddle p, GameLevels levels, GameView view)
        {
                this.balls = b;
                this.paddle = p;
                this.levels = levels;
                this.gameview = view;
        }
        @Override
        public void run()
        {
                while(true)
                {
                        if(levels.isFinishLevel())
                        {
                                levels.setCurrentLevel(levels.getCurrentLevel()+1);
                                for(int i=1;i<balls.length;i++)
                                {
                                        balls[i].setVisible(false);
                                        balls[i].restart();
                                }
                                balls[0].restart();
                                try
                                {
                                        sleep(1000);
                                }
                                catch (InterruptedException e)
                                {
                                        e.printStackTrace();
                                }
                        }
                        for(int i=0;i<balls.length;i++)
                        {
                                if(this.balls[i].isVisible())
                                {
                                        this.balls[i].moveBall();
                                        checkHitPaddle(i);
                                        checkHitBrick(i);
                                }
                        }
                        this.gameview.postInvalidate();
                        try
                        {
                                sleep(1);
                        }
                        catch (InterruptedException e)
                        {
                                e.printStackTrace();
                        }
                }
        }
        public void checkHitPaddle(int ballI)
        {
                Ball ball = balls[ballI];
                if(ball.Left()<=paddle.Right() && ball.Right()>=paddle.Left())
                {
                        if(ball.Bottom()>=paddle.Top())
                        {
                                ball.bounceUp();
                        }
                }
                else if(ball.Bottom()>=paddle.Bottom()+10){

                        Intent GameOverScreen = new Intent(BallMover.this, GameOverScreen.class);
                        startActivity(GameOverScreen);
                }
                        //ball.restart();
        }
        public void checkHitBrick(int ballI)
        {
                Ball ball = balls[ballI];
                String direction = getHitBricksDirection(ballI).name();
                if(direction.compareTo("Top")==0)
                        ball.bounceUp();
                if(direction.compareTo("Bottom")==0)
                        ball.bounceDown();
                if(direction.compareTo("Left")==0)
                        ball.bounceLeft();
                if(direction.compareTo("Right")==0)
                        ball.bounceRight();
        }
        public Directions getHitBricksDirection(int ballI)
        {
                Ball ball = balls[ballI];
                Bricks bricks = levels.getLevelBricks();
                Brick brick;
                for(int i=0;i<bricks.rows();i++)
                {
                        for(int j=0;j<bricks.cols();j++)
                        {
                                brick = bricks.getBrick(i, j);
                                if(brick.getType()!=0)
                                {
                                        if(ball.Left()<=brick.Right() && ball.Right()>=brick.Left())
                                        {
                                                if(ball.Bottom()-brick.Top()>=0 && ball.Bottom()-brick.Top()<=1)
                                                {
                                                        brick.ballHitBrick();
                                                        return Directions.Top;
                                                }
                                                if(ball.Top()-brick.Bottom()<=0 && ball.Top()-brick.Bottom()>=-1)
                                                {
                                                        brick.ballHitBrick();
                                                        return Directions.Bottom;
                                                }
                                        }
                                        if(ball.Top()<=brick.Bottom() && ball.Bottom()>=brick.Top())
                                        {
                                                if(ball.Right()-brick.Left()>=0 && ball.Right()-brick.Left()<=1)
                                                {
                                                        brick.ballHitBrick();
                                                        return Directions.Left;
                                                }
                                                if(ball.Left()-brick.Right()<=0 && ball.Left()-brick.Right()>=-1)
                                                {
                                                        brick.ballHitBrick();
                                                        return Directions.Right;
                                                }
                                        }
                                }
                        }
                }
                return Directions.None;
        }
}
我知道BallMover类是线程,它实际上需要是活动


有人有解决办法吗

Intent构造函数的第一个参数是其任何子类的
Context
类的任何对象。因此,解决此问题的方法之一是在
BallMover
构造函数处传递
Context

public BallMover(Ball[] b, Paddle p, GameLevels levels, GameView view, Context context)
    {
            this.balls = b;
            this.paddle = p;
            this.levels = levels;
            this.gameview = view;
            this.context = context;
    }
例如,通过
Context
可以传递应用程序上下文。之后,您可以创建
Intent
,如下所示:

Intent myIntent = new Intent(context, GameOverScreen.class);

您的问题是什么?将上下文传递给线程,或使用代理要求活动启动
GameOverScreen
可以从某些活动调用您的线程类来启动活动。并将任何上下文传递给线程的构造函数,好吗。。。我这样做了,但行:星际触觉(游戏屏幕);如果类扩展线程而不是扩展活动,则无法工作。对吗?@user3545490我已经做了编辑,你不应该像你想开始的课程那样调用你的意图。是的,GameOverScreen应该是Activity的子类。我问的是BallMover类。很抱歉,此编辑对我不起作用:(.我完全像你一样..@user3545490为什么它不起作用?它应该起作用。你有运行时异常或编译错误吗?
Intent myIntent = new Intent(context, GameOverScreen.class);