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