Это часть кода мобильной игры:
public class Plane {
Bitmap plane[] = new Bitmap[15];
int planeX, planeY, velocity, planeFrame;
Random random;
public Plane(Context context) {
plane[0] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_1);
plane[1] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_2);
plane[2] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_3);
plane[3] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_4);
plane[4] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_5);
plane[5] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_6);
plane[6] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_7);
plane[7] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_8);
plane[8] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_9);
plane[9] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_10);
plane[10] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_11);
plane[11] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_12);
plane[12] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_13);
plane[13] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_14);
plane[14] = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane_15);
random = new Random();
resetPosition();
}
public Bitmap getBitmap(){
return plane[planeFrame];
}
public int getWidth(){
return plane[0].getWidth(); // не понимаю, что происходит здесь. Почему возвращается именно нулевой элемент, причём с обращением к этому же методу
}
public int getHeight(){
return plane[0].getHeight();
}
public void resetPosition(){
planeX = GameView.dWidth + random.nextInt(1200);
planeY = random.nextInt(300);
velocity = 8 + random.nextInt(13);
planeFrame = 0;
}
}
Этот метод (около которого есть комментарий), вызывается в методе другого класса:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(background, null, rect, null);
for (int i = 0; i < planes.size(); i++) {
canvas.drawBitmap(planes.get(i).getBitmap(), planes.get(i).planeX, planes.get(i).planeY, null);
planes.get(i).planeFrame++;
if (planes.get(i).planeFrame > 14) {
planes.get(i).planeFrame = 0;
}
planes.get(i).planeX -= planes.get(i).velocity;
if (planes.get(i).planeX < -planes.get(i).getWidth()) {
planes.get(i).resetPosition();
life--;
if(life == 0){ // конец игры (смерть)
Intent intent = new Intent(context, GameOver.class);
intent.putExtra("score", (count * 10));
context.startActivity(intent);
((Activity) context).finish();
}
}
canvas.drawBitmap(planes2.get(i).getBitmap(), planes2.get(i).planeX, planes2.get(i).planeY, null);
planes2.get(i).planeFrame++;
if (planes2.get(i).planeFrame > 9) {
planes2.get(i).planeFrame = 0;
}
planes2.get(i).planeX += planes2.get(i).velocity;
if (planes2.get(i).planeX > (dWidth + planes2.get(i).getWidth())) {
planes2.get(i).resetPosition();
life--;
if(life == 0){
Intent intent = new Intent(context, GameOver.class);
intent.putExtra("score", (count * 10));
context.startActivity(intent);
((Activity) context).finish();
}
}
}
for (int i = 0; i < missiles.size(); i++) {
if (missiles.get(i).y > -missiles.get(i).getMissileHeight()) {
missiles.get(i).y -= missiles.get(i).mVelocity;
canvas.drawBitmap(missiles.get(i).missile, missiles.get(i).x, missiles.get(i).y, null);
if (missiles.get(i).x >= planes.get(0).planeX && (missiles.get(i).x + missiles.get(i).getMissileWidth())
<= (planes.get(0).planeX + planes.get(0).getWidth()) && missiles.get(i).y >= planes.get(0).planeY &&
missiles.get(i).y <= (planes.get(0).planeY + planes.get(0).getHeight())) {
Explosion explosion = new Explosion(context);
explosion.explosionX = planes.get(0).planeX + planes.get(0).getWidth()/2 - explosion.getExplosionWidth()/2;
explosion.explosionY = planes.get(0).planeY + planes.get(0).getHeight()/2 - explosion.getExplosionHeight()/2;
explosions.add(explosion);
planes.get(0).resetPosition();
count++;
missiles.remove(i);
if(point != 0){
sp.play(point, 1, 1, 0, 0, 1);
}
}else if (missiles.get(i).x >= planes.get(1).planeX && (missiles.get(i).x + missiles.get(i).getMissileWidth())
<= (planes.get(1).planeX + planes.get(1).getWidth()) && missiles.get(i).y >= planes.get(1).planeY &&
missiles.get(i).y <= (planes.get(1).planeY + planes.get(1).getHeight())) {
Explosion explosion = new Explosion(context);
explosion.explosionX = planes.get(1).planeX + planes.get(1).getWidth()/2 - explosion.getExplosionWidth()/2;
explosion.explosionY = planes.get(1).planeY + planes.get(1).getHeight()/2 - explosion.getExplosionHeight()/2;
explosions.add(explosion);
planes.get(1).resetPosition();
count++;
missiles.remove(i);
if(point != 0){
sp.play(point, 1, 1, 0, 0, 1);
}
}else if (missiles.get(i).x >= planes2.get(0).planeX && (missiles.get(i).x + missiles.get(i).getMissileWidth())
<= (planes2.get(0).planeX + planes2.get(0).getWidth()) && missiles.get(i).y >= planes2.get(0).planeY &&
missiles.get(i).y <= (planes2.get(0).planeY + planes2.get(0).getHeight())) {
Explosion explosion = new Explosion(context);
explosion.explosionX = planes2.get(0).planeX + planes2.get(0).getWidth()/2 - explosion.getExplosionWidth()/2;
explosion.explosionY = planes2.get(0).planeY + planes2.get(0).getHeight()/2 - explosion.getExplosionHeight()/2;
explosions.add(explosion);
planes2.get(0).resetPosition();
count++;
missiles.remove(i);
if(point != 0){
sp.play(point, 1, 1, 0, 0, 1);
}
}else if (missiles.get(i).x >= planes2.get(1).planeX && (missiles.get(i).x + missiles.get(i).getMissileWidth())
<= (planes2.get(1).planeX + planes2.get(1).getWidth()) && missiles.get(i).y >= planes2.get(1).planeY &&
missiles.get(i).y <= (planes2.get(1).planeY + planes2.get(1).getHeight())) {
Explosion explosion = new Explosion(context);
explosion.explosionX = planes2.get(1).planeX + planes2.get(1).getWidth()/2 - explosion.getExplosionWidth()/2;
explosion.explosionY = planes2.get(1).planeY + planes2.get(1).getHeight()/2 - explosion.getExplosionHeight()/2;
explosions.add(explosion);
planes2.get(1).resetPosition();
count++;
missiles.remove(i);
if(point != 0){
sp.play(point, 1, 1, 0, 0, 1);
}
}
} else {
missiles.remove(i);
}
}
for(int j=0; j<explosions.size(); j++){
canvas.drawBitmap(explosions.get(j).getExplosion(explosions.get(j).explosionFrame), explosions.get(j).explosionX,
explosions.get(j).explosionY, null);
explosions.get(j).explosionFrame++;
if(explosions.get(j).explosionFrame > 8){
explosions.remove(j);
}
}
canvas.drawBitmap(tank, (dWidth / 2 - tankWidth / 2), dHeight - tankHeight, null);
canvas.drawText("Pt: " + (count * 10), 0, TEXT_SIZE, scorePaint);
canvas.drawRect(dWidth - 110, 10, dWidth - 110 + 10*life, TEXT_SIZE, healthPaint);
handler.postDelayed(runnable, UPDATE_MILLIS);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Данный код генерирует числа из введённого диапазонаМожете показать на ошибки в коде, и как его можно улучшить
У меня есть навигационное меню которое надо сделать адаптивным Само меню состоит из 4 кнопок, и мне нужно что бы они перестраивались в сетку...