我是Java的新手,所以我希望这不是一个愚蠢的问题。我有一个叫“敌人”的课。Android:我如何乘一个类并创建其变量的不同实例?
我知道如何乘以类,我使用“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);
}
}
}
而这里的 “敌人” 类:
public class Enemy extends Player{
public Enemy(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
float x,y = (float) (Math.random()*200);
public void draw(){
Bitmap bitmap = (Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
canvas.drawBitmap(bitmap, x, y, null);
}
}
我也试着在“Enemy”类中声明这些变量,但它们不起作用。位图保留在(0,0)中。
注意:“Player”和“Enemy”类是在“MainActivity”类中声明的。
每个类都应该有它自己的java文件;)。如果你这样做了,你可以为'Enemy'创建一个构造函数,并在其中填充x和y变量:'public Enemy(){x =(float)(Math.random()* 200); y =(float)(Math.random()* 200); }'。这样,每个“Enemy”的实例都有自己的坐标。 – Tom 2014-09-01 21:45:09
非常感谢您的评论。我试过了,它似乎不起作用。位图停留在坐标(0,0)处。 – Gonzalo 2014-09-01 21:47:00
您能否更新您的问题并显示使用您的更改? – Tom 2014-09-01 21:47:51