Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:我如何将一个类相乘并创建其变量的不同实例?_Java_Android_Class - Fatal编程技术网

Java Android:我如何将一个类相乘并创建其变量的不同实例?

Java Android:我如何将一个类相乘并创建其变量的不同实例?,java,android,class,Java,Android,Class,我是Java新手,所以我希望这不是一个愚蠢的问题。我有一门课叫“敌人” 我知道如何乘法类,我使用for循环。现在的问题是,移动位图的变量x和y对于类的每个实例都具有相同的值。我希望它们是不同的,以创造一些随机性 主要类别: public class MainActivity extends Activity{ Player ourView; @SuppressLint("ClickableViewAccessibility") protected void onC

我是Java新手,所以我希望这不是一个愚蠢的问题。我有一门课叫“敌人”

我知道如何乘法类,我使用for循环。现在的问题是,移动位图的变量x和y对于类的每个实例都具有相同的值。我希望它们是不同的,以创造一些随机性

主要类别:

    public class MainActivity extends Activity{


    Player ourView; 

    @SuppressLint("ClickableViewAccessibility") protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                             WindowManager.LayoutParams.FLAG_FULLSCREEN);

        ourView = new Player(this);

        setContentView(ourView);
    }

    protected void onPause() {
        super.onPause();
        ourView.pause();
    }

    protected void onResume() {
        super.onResume();
        ourView.resume();
    }


}
以下是玩家等级:

public class Player extends SurfaceView implements Runnable {

    Canvas canvas = new Canvas();
    SurfaceHolder ourHolder;
    Thread ourThread = null;
    boolean isRunning = true;

    public Player(Context context) {
        super(context);
        ourHolder = getHolder();
        ourThread = new Thread(this);
        ourThread.start();
    }

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

    public void resume() {
        isRunning = true;
    }

    public void run() {
        while(isRunning) {
            if(!ourHolder.getSurface().isValid())
                continue;

                canvas = ourHolder.lockCanvas();
                canvas.drawRGB(30, 30, 200);

                Enemy[] enemy = new Enemy[3];
                for(int i = 0; i<enemy.length; i++){
                    enemy[i] = new Enemy(null);
                    enemy[i].draw();
                }

            ourHolder.unlockCanvasAndPost(canvas);
        }           
    }
}
我还试图在敌方类中声明这些变量,但它们就是不起作用。位图保持在0,0中

注意:玩家和敌人类在MainActivity类中声明。

你的敌人类不应该扩展玩家类,因为它们除了画布和上下文之外没有任何相似之处。 您的敌人可能的实施方式如下所示:

public class Enemy {
  private Bitmap bitmap;
  private Canvas canvas;
  private Context context;
  private float x, y;

  public Enemy(Canvas canvas, Context context) {
    bitmap = BitmapFactory.decodeResource(
        context.getResources(), R.drawable.ic_launcher);
    x = (float) (Math.random() * 200);
    y = (float) (Math.random() * 200);
  }

  public void draw() {
    canvas.drawBitmap(bitmap, x, y, null);
  }

  public void printCoordinates() { // just used for printing
    System.out.println("x = " + x + " / y = "+ y);
  }
}
您的玩家等级只需稍作调整即可创建适当的敌人等级:


如果您真的想扩展Player类,那么您仍然可以这样做。这在您的敌人类中不会有太大变化。

每个类都应该有自己的java文件;。如果你这样做了,你可以为敌人创建一个构造函数,并在那里填充x和y变量:public-defect{x=float-Math.random*200;y=float-Math.random*200;}。这样,每个敌人都有自己的坐标。非常感谢你的评论。我试过了,但似乎不起作用。位图保持在坐标0,0处。你能更新你的问题并显示使用你的更改吗?我刚刚在另一个文件中声明了敌方类,但问题是运行的方法无法识别该类。你是否使用导入语句导入了该类?它起作用了!非常感谢你。唯一的一点是,它是一个永无止境的循环。它会为它们中的每一个生成随机值,但始终如此。我希望创建这些值,然后位图保留在该位置。我该怎么做?当玩家线程运行时,你正在创建新的敌人实例,这就是为什么你在画布上得到越来越多的位图。你应该想想你真正想要什么。如果你只想在屏幕上显示3个敌人,那么你应该将敌人循环提取到一个separat方法,该方法将检查是否有3个实例可用,并在必要时创建一个新实例。您还应该将可用的敌人实例作为变量存储在列表中的玩家类中,以允许访问当前敌人。使用那个列表而不是敌人[]。好的,我会这么做。非常感谢您抽出时间,不客气。我推荐一个自己的类来处理可用的敌人。这将比Player类中的单个方法干净得多:。
public class Enemy {
  private Bitmap bitmap;
  private Canvas canvas;
  private Context context;
  private float x, y;

  public Enemy(Canvas canvas, Context context) {
    bitmap = BitmapFactory.decodeResource(
        context.getResources(), R.drawable.ic_launcher);
    x = (float) (Math.random() * 200);
    y = (float) (Math.random() * 200);
  }

  public void draw() {
    canvas.drawBitmap(bitmap, x, y, null);
  }

  public void printCoordinates() { // just used for printing
    System.out.println("x = " + x + " / y = "+ y);
  }
}
Enemy[] enemy = new Enemy[3];
for(int i = 0; i < enemy.length; i++){
    enemy[i] = new Enemy(canvas, context);
    enemy[i].printCoordinates(); // just used for printing the generated coordinates
    enemy[i].draw();
}
x = 27.236885 / y = 7.8905525
x = 61.842735 / y = 158.4654
x = 186.16629 / y = 20.208426