Android рдкрд░ рдПрдХ рд╕рд░рд▓ 2D рдЧреЗрдо рдмрдирд╛рдПрдВ

рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди!

рдЬрдм рдореИрдВрдиреЗ рдпрд╣ "рдЧреЗрдо" рд▓рд┐рдЦрд╛ рдерд╛, рддреЛ рдореБрдЭреЗ рд╕реНрдкреНрд░рд╛рдЗрдЯ рд▓реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рд╡рд╛рд▓ рдереЗ, рддрд╛рдХрд┐ рд╡реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдХреЗ рдмрд╛рдж рджрд┐рдЦрд╛рдИ рджреЗрдВ, рджреЛ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдФрд░ рдЕрдзрд┐рдХ рдХреЗ рдЯрдХрд░рд╛рд╡реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рднреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ, рдореИрдВ рдЖрдЬ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЗрди рд╕рднреА рдореБрджреНрджреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, рдореБрдЭреЗ рдЕрдкрдиреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдЙрддреНрддрд░ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдФрд░ рдореБрдЭреЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдкреЛрд╕реНрдЯ рдХреБрдЫ рднреА рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдЧреЗрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рдЙрджреНрдпреЛрдЧ рдореЗрдВ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВред рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЧрдпрд╛, рдореИрдВ рдмрд┐рд▓реНрд▓реА рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реВрдВред

рд╕рдорд╕реНрдпрд╛ рдХрдерди:


рдЦреЗрд▓ рдПрдХ рдХреНрд╖реЗрддреНрд░ (рджреГрд╢реНрдп) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕ рдкрд░ рдирд┐рдВрдЬрд╛ рдФрд░ рднреВрдд рд╕реНрдерд┐рдд рд╣реИрдВред рдПрдХ рдирд┐рдВрдЬрд╛ рдХреЛ рдЙрди рдкрд░ рд╢реВрдЯрд┐рдВрдЧ рдХрд░рдХреЗ рдЗрди рднреВрддреЛрдВ рд╕реЗ рдЕрдкрдиреЗ рдЖрдзрд╛рд░ рдХрд╛ рдмрдЪрд╛рд╡ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рддрд░рд╣ рдХреЗ рдЦреЗрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдПрдВрдбреНрд░реЙрдЗрдб рдорд╛рд░реНрдХреЗрдЯ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рджреГрдврд╝рддрд╛ рд╕реЗ рд▓рд╣рд░рд╛рдпрд╛, рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рд╕рдорд╛рди рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдЦреЗрд▓ рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
рдЫрд╡рд┐

рд╡рд┐рдХрд╛рд╕ рд╢реБрд░реВ


рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред рд▓реЙрдиреНрдЪ рдЧреНрд░рд╣рдг - рдлрд╝рд╛рдЗрд▓ - рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ - рд░рдХреНрд╖рд╛ - рдореБрдЦреНрдп.рдЬрд╛рд╡рд╛ред

рд╣рдорд╛рд░реА Main.java рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рд╕рднреА рдХреЛрдб рдмрджрд▓реЗрдВ:

Main.java
public class Main extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //  ,       setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //  ,     getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); //    requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(new GameView(this)); } } 


рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рд╣рдорд╛рд░реЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╡рд┐рд╖рдп рдХреА * .xml рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рдХреНрд▓рд╛рд╕ рд╣реИ, рдЙрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
 setContentView(new GameView(this)); 


рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдПрдХ рдЧреЗрдо рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ GameView.java рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдореБрдЦреНрдп рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕ рдкрд░ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рддреИрдпрд╛рд░ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рд╣рдорд╛рд░реА рд╕реНрдЯреНрд░реАрдо рд╣реЛрдЧреА, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдЧреЗрдо рд▓реЛрдб рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдбреНрд░рд╛рдЗрдВрдЧ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрдм рдордВрдЪ рдкрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдпрд╣ рд╡рд░реНрдЧ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:

GameView.java
 import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Random; import towe.def.GameView.GameThread; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; public class GameView extends SurfaceView { /**  GameLoopThread*/ private GameThread mThread; public int shotX; public int shotY; /**   */ private boolean running = false; //-------------Start of GameThread--------------------------------------------------\\ public class GameThread extends Thread { /** */ private GameView view; /** */ public GameThread(GameView view) { this.view = view; } /**  */ public void setRunning(boolean run) { running = run; } /** ,    */ public void run() { while (running) { Canvas canvas = null; try { //  Canvas- canvas = view.getHolder().lockCanvas(); synchronized (view.getHolder()) { //   onDraw(canvas); } } catch (Exception e) { } finally { if (canvas != null) { view.getHolder().unlockCanvasAndPost(canvas); } } } } } //-------------End of GameThread--------------------------------------------------\\ public GameView(Context context) { super(context); mThread = new GameThread(this); /*       */ getHolder().addCallback(new SurfaceHolder.Callback() { /***    */ public void surfaceDestroyed(SurfaceHolder holder) { boolean retry = true; mThread.setRunning(false); while (retry) { try { //    mThread.join(); retry = false; } catch (InterruptedException e) { } } } /**    */ public void surfaceCreated(SurfaceHolder holder) { mThread.setRunning(true); mThread.start(); } /**    */ public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } }); } /**     */ protected void onDraw(Canvas canvas) { canvas.drawColor(Color.WHITE); } } 


рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рдмреБрдирд┐рдпрд╛рджреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рд╣рдо рдЦреЗрд▓ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ (рдХрд╛рд░реНрдпреЛрдВ) рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдХреБрдЫ рдФрд░ рдХрдХреНрд╖рд╛рдПрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдЧрд▓реЗ рдмрд┐рдВрджреБ рдкрд░ рдЬрд╛рдПрдВ - рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ рдмрдирд╛рдирд╛ред

рд╕реНрдкреНрд░рд┐рдЯ рдирд┐рд░реНрдорд╛рдг


рд╕реНрдкреНрд░рд╛рдЗрдЯ 2 рдбреА рдЧреЗрдо рдореЗрдВ рдЫреЛрдЯреА рддрд╕реНрд╡реАрд░реЗрдВ рд╣реИрдВ рдЬреЛ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдорддреА рд╣реИрдВред рдпрд╣ рдкреБрд░реБрд╖, рдЧреЛрд▓рд╛-рдмрд╛рд░реВрдж рдпрд╛ рдмрд╛рджрд▓ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдЧреЗрдо рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдкреНрд░рд╛рдЗрдЯ рд╣реЛрдВрдЧреЗ: рдирд┐рдВрдЬрд╛ рдЫрд╡рд┐ рднреВрдд рдЫрд╡рд┐ рдФрд░ рдЦреЛрд▓ рдЫрд╡рд┐ ред

рдЕрдм рд╣рдо рдЧреИрд░-рдПрдирд┐рдореЗрдЯреЗрдб рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореИрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ рдбрд╛рд▓реВрдВрдЧрд╛, рдЕрдЧрд░ рдореБрдЭреЗ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╕реАрдЦрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрд╕реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдЧреЗрдо рдмрдирд╛рдиреЗ рдХреЗ рджреВрд╕рд░реЗ рдкрд╛рда рдореЗрдВ рдкреВрдЫрддрд╛ рд╣реВрдВред

рдЕрдм рдЗрди рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд░реЗрд╕ / рдбреНрд░рд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЧреНрд░рд╣рдг рдЗрди рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХреЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХреЗрдВред

рдирд┐рдореНрди рдЪрд┐рддреНрд░ рдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рд╕реНрдХреНрд░реАрди рдкрд░ рдХреИрд╕реЗ рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛ред
рдЫрд╡рд┐
рдПрдХ рдЙрдмрд╛рдК рддрд╕реНрд╡реАрд░ ... рдЪрд▓реЛ рдЗрд╕реЗ рдмрд╣реБрдд рд╣реА рдЦрд┐рд▓рд╛рдбрд╝реА рдмрдирд╛рддреЗ рд╣реИрдВред

рд╣рдореЗрдВ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕реНрдкреНрд░рд╛рдЗрдЯ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ? рд╣рдо рдЦрд┐рд▓рд╛рдбрд╝реА Player.java рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

Player.java
 import android.graphics.Bitmap; import android.graphics.Canvas; public class Player { /**  */ GameView gameView; // Bitmap bmp; //     int x; int y; // public Player(GameView gameView, Bitmap bmp) { this.gameView = gameView; this.bmp = bmp; //  this.x = 0; //    this.y = gameView.getHeight() / 2; //   } //   public void onDraw(Canvas c) { c.drawBitmap(bmp, x, y, null); } } 


рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд╣рдорд╛рд░рд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рдЕрднреА рднреА рдЦрдбрд╝рд╛ рд╣реИ рдФрд░ рджреБрд╢реНрдорди рдкрд░ рдЧреЛрд▓реА рдЪрд▓рд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╢реВрдЯрд┐рдВрдЧ рдХреЛ рдПрдХ рдЧреЛрд▓реА (рд╢реЗрд▓) рдХреА рдХрдХреНрд╖рд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдо рдЖрдЧреЗ рдХрд░реЗрдВрдЧреЗред

рдПрдХ рдФрд░ рдХреНрд▓рд╛рд╕ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ Bullet.java рдХрд╣реЗрдВ, рдпрд╣ рдХреНрд▓рд╛рд╕ рдЙрдбрд╝рд╛рди, рдЙрдбрд╝рд╛рди рдХреА рдЧрддрд┐ рдФрд░ рдмреБрд▓реЗрдЯ рдХреЗ рдЕрдиреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдЧреАред рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ, рдФрд░ рдЙрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦреЗрдВ:

Bullet.java
 import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Rect; public class Bullet { /***/ private Bitmap bmp; /***/ public int x; public int y; /**  =15*/ private int mSpeed=25; public double angle; /***/ public int width; /***/ public int height; public GameView gameView; /***/ public Bullet(GameView gameView, Bitmap bmp) { this.gameView=gameView; this.bmp=bmp; this.x = 0; //   this.y = 120; //   this.width = 27; //  this.height = 40; //  //          angle = Math.atan((double)(y - gameView.shotY) / (x - gameView.shotX)); } /** ,  */ private void update() { x += mSpeed * Math.cos(angle); //     mSpeed     angle y += mSpeed * Math.sin(angle); //    -//- } /**  */ public void onDraw(Canvas canvas) { update(); //          canvas.drawBitmap(bmp, x, y, null); } } 


рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЧреЛрд▓реА рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рддреА рд╣реИ - рдЗрд╕реЗ рдЦрд┐рд▓рд╛рдбрд╝реА рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдИ рдЧрдИ рджрд┐рд╢рд╛ рдореЗрдВ рдЙрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдордВрдЪ рдкрд░ рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ рдбреНрд░рд╛ рдХрд░реЗрдВ


рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЗрди рджреЛ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ GameView.java рд╡рд░реНрдЧ рдореЗрдВ рдХреЛрдб рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХрдИ рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╣рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВрдЧреЗред рдореИрдВ рд╕рднреА рдХреЛрдб рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛, рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЙрди рддрд░реАрдХреЛрдВ рдХрд╛ рдХреЛрдб рджреЗрдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рдирдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рд╕реНрдХреНрд░реАрди рдкрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрд▓реЗрдЯ рдФрд░ рдкреНрд▓реЗрдпрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЧреЛрд▓рд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡реЗ рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рди рд╣реЛрдВ, рдФрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЦрд┐рд▓рд╛рдбрд╝реА рд╡рд░реНрдЧ рдСрдмреНрдЬреЗрдХреНрдЯред

GameView рдЯреЛрдкреА
 private List<Bullet> ball = new ArrayList<Bullet>(); private Player player; Bitmap players; 


рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ, рдЧреЗрдо рд╡реНрдпреВ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЦреЛрдЬрдиреЗ рдФрд░ рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ рджреЛ рд▓рд╛рдЗрдиреЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

GameView.java - рдЧреЗрдо рд╡реНрдпреВ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░
 players= BitmapFactory.decodeResource(getResources(), R.drawable.player2); player= new Player(this, guns); 


рдФрд░ onDraw (рдХреИрдирд╡рд╕ c) рд╡рд┐рдзрд┐ рдореЗрдВ; рдЗрди рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ рдХреЛ рджрд┐рдЦрд╛рдИ рджреЗрдВред рд╣рдо рд╕реВрдЪреА рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣рдорд╛рд░реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреВрд░реЗ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред

GameView, рдЬрд╛рд╡рд╛
  /**     */ protected void onDraw(Canvas canvas) { canvas.drawColor(Color.WHITE); Iterator<Bullet> j = ball.iterator(); while(j.hasNext()) { Bullet b = j.next(); if(bx >= 1000 || bx <= 1000) { b.onDraw(canvas); } else { j.remove(); } } canvas.drawBitmap(guns, 5, 120, null); } 


рдФрд░ рдЧреЛрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдм рдЖрдк рд╕реНрдХреНрд░реАрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ createSprites () рд╡рд┐рдзрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ; рдЬреЛ рд╣рдорд╛рд░реЗ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред

GameView.java
  public Bullet createSprite(int resouce) { Bitmap bmp = BitmapFactory.decodeResource(getResources(), resouce); return new Bullet(this, bmp); } 


рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рдЕрдВрдд рдореЗрдВ рд╣рдо рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ - рдСрдирдЯрдЪ (); рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕рднреА рд╕реНрдкрд░реНрд╢реЛрдВ рдХреЛ рдкрдХрдбрд╝ рд▓реЗрдЧрд╛ рдФрд░ рдмреБрд▓реЗрдЯ рдХреЛ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдЧрд╛ рдЬрд╣рд╛рдВ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

GameView.java
 public boolean onTouchEvent(MotionEvent e) { shotX = (int) e.getX(); shotY = (int) e.getY(); if(e.getAction() == MotionEvent.ACTION_DOWN) ball.add(createSprite(R.drawable.bullet)); return true; } 


рдпрджрд┐ рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд▓рд┐рдХ рдПрдХ рдмрд╛рд░ рд╕рдВрд╕рд╛рдзрд┐рдд рди рд╣реЛ, рдЕрд░реНрдерд╛рдд 1 рдкреНрд░реЗрд╕ - 1 рдЧреЛрд▓реА, рдФрд░ 1 рдкреНрд░реЗрд╕ - рдФрд░ рдЬрдм рддрдХ рдЖрдк рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ, рддрдм рддрдХ рдЖрдкрдХреЛ рдЧреЛрд▓реА рдорд╛рд░ рджреА рдЬрд╛рдПрдЧреА, рдЕрдЧрд░ рдЖрдкрдХреЛ (e.getAction () == MotionEvent.ACTION_DOWN) {}
рдФрд░ рдХреЗрд╡рд▓ рдмреЙрд▓ рдЫреЛрдбрд╝реЗрдВ редdd (createSprite (R.drawable.bullet)); ред

рдпрд╣реА рд╣реИ, рд╣рдорд╛рд░реЗ рдЦреЗрд▓ рдХреЛ рдЪрд▓рд╛рдиреЗ рдФрд░ рд╢реВрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП:


рджреБрд╢реНрдордиреЛрдВ


рдЖрджреЗрд╢ рдореЗрдВ рдХрд┐ рд╣рдо рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдКрдм рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдЖрдкрдХреЛ рджреБрд╢реНрдорди рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдФрд░ рд╡рд░реНрдЧ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ Enemy.java рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЬреЛ рд╣рдорд╛рд░реЗ рджреБрд╢реНрдорди рдХреЛ рд╣рдорд╛рд░реЗ рдмреЗрд╕ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдХрдХреНрд╖рд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рджреЗрдЦреЗрдВ:

Enemy.java
 import java.util.Random; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Rect; public class Enemy { /**   */ public int x; public int y; /***/ public int speed; /**   */ public int width; public int height; public GameView gameView; public Bitmap bmp; /** */ public Enemy(GameView gameView, Bitmap bmp){ this.gameView = gameView; this.bmp = bmp; Random rnd = new Random(); this.x = 900; this.y = rnd.nextInt(300); this.speed = rnd.nextInt(10); this.width = 9; this.height = 8; } public void update(){ x -= speed; } public void onDraw(Canvas c){ update(); c.drawBitmap(bmp, x, y, null); } } 


рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдВ: рд╣рдордиреЗ рдЕрдкрдиреЗ рджреБрд╢реНрдорди, рдКрдВрдЪрд╛рдИ рдХреА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдордВрдЪ рдкрд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд░реИрдВрдбрдо () рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдЬрдм рд╡реЗ рдордВрдЪ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдВ, рддреЛ рд╡реЗ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рд╕рдм рдХреБрдЫ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдВред рд╣рдорд╛рд░реА рдЧрддрд┐ рднреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рджреБрд╢реНрдорди рдПрдХ рдЕрд▓рдЧ рдЧрддрд┐ рд╕реЗ рдЪрд▓реЗ, рд╣рдорд╛рд░реА рдЧрддрд┐ 0 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдФрд░ 10, 10 рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ - рдЕрдзрд┐рдХрддрдо рдЧрддрд┐ рдЬреЛ рджреБрд╢реНрдорди рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреА рд╣реИред рд╡реЗ рджрд╛рдПрдВ рд╕реЗ рдмрд╛рдПрдВ рдУрд░ рдмрдврд╝реЗрдВрдЧреЗ, рддрд╛рдХрд┐ рд╡реЗ рддреБрд░рдВрдд рдордВрдЪ рдкрд░ рджрд┐рдЦрд╛рдИ рди рджреЗрдВ, рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рд╕реНрдХреНрд░реАрди рдХреА рджреГрд╢реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП 900 рдкрд┐рдХреНрд╕реЗрд▓ рдкрд░ рдлреЗрдВрдХ рджрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП рдЬрдм рд╡реЗ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ рддреЛ рд╣рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рд╢рддреНрд░реБ рдХреЛ рдордВрдЪ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП GameView.java рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░реЗрдВ:

рд╣рдо рджреБрд╢реНрдордиреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡реЗ рдХрднреА рдЦрддреНрдо рди рд╣реЛрдВ рдФрд░ рдПрдХ рдмрд┐рдЯрдореИрдк рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕реНрдкреНрд░рд╛рдЗрдЯ рд╣реЛрдЧрд╛:

GameView рдЯреЛрдкреА
 private List<Enemy> enemy = new ArrayList<Enemy>(); Bitmap enemies; 


рдЕрдЧрд▓рд╛, рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рджреБрд╢реНрдордиреЛрдВ рдХреА рдЧрддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдзрд╛рдЧрд╛ рдмрдирд╛рдПрдВ:

GameView рдЯреЛрдкреА
 private Thread thred = new Thread(this); 


рдФрд░ рд╣рдо рд░рдирд╡реЗрдмрд▓ рдХреНрд▓рд╛рд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рддрд░рд╣ рд╕реЗ GameView рдХреНрд▓рд╛рд╕ рдХрд╛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
 public class GameView extends SurfaceView implements Runnable 


рдЕрдм рдЖрдкрдХреЗ рдЧреНрд░рд╣рдг рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд░рди () рд╡рд┐рдзрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рдмрдирд╛рдПрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

GameView рд╡рд░реНрдЧ рдХреЗ рдмрд╣реБрдд рдиреАрдЪреЗ
 public void run() { while(true) { Random rnd = new Random(); try { Thread.sleep(rnd.nextInt(2000)); enemy.add(new Enemy(this, enemies)); } catch (InterruptedException e) { e.printStackTrace(); } } } 

рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ 0 рд╕реЗ 2000 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдпрд╛ рд╣рд░ 0, 1 рдпрд╛ 2 рд╕реЗрдХрдВрдб рдореЗрдВ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдмрдирд╛рдПрдЧрд╛ред

рдЕрдм рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдореЗрдВ рд╣рдо рдЕрдВрдд рдореЗрдВ рджреГрд╢реНрдп рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ:

рдЧреЗрдорд╡реНрдпреВ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░
 enemies = BitmapFactory.decodeResource(getResources(), R.drawable.target); enemy.add(new Enemy(this, enemies)); 


рдФрд░ рд╣рд╛рдВ, рд╣рдореЗрдВ рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ onDraw () рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ; рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

GameView рдореЗрдВ OnDraw () рд╡рд┐рдзрд┐
 Iterator<Enemy> i = enemy.iterator(); while(i.hasNext()) { Enemy e = i.next(); if(ex >= 1000 || ex <= 1000) { e.onDraw(canvas); } else { i.remove(); } } 

рдлрд┐рд░ рд╕реЗ, рд╣рдо рдПрдХ рдЗрдЯреНрд░реЗрдЯрд░ рдФрд░ рдЪреЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреБрд╢реНрдордиреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ - рдЕрдЧрд░ рджреБрд╢реНрдорди 1000 рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рд╕реАрдорд╛ рд╕реЗ рдкрд░реЗ рдЪрд▓рд╛ рдЧрдпрд╛ - рд╣рдо рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд╣рдо рдореЗрдореЛрд░реА рдХреЛ рдирд╣реАрдВ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд▓реЛрдб рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдлреЛрди рдлреНрд░реАрдЬ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдо рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрддреЗ рдирд╣реАрдВ рд╣реИрдВред рдкреВрд░рд╛ рдЦреЗрд▓ рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред

рд╣рдо рдЕрдкрдирд╛ рдЦреЗрд▓ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдХреНрдпрд╛ рджреЗрдЦреЗрдВрдЧреЗ? рдФрд░ рдпрд╣рд╛рдБ рд╣реИ:


рд▓реЗрдХрд┐рди рдореИрдВ рдХреНрдпрд╛ рджреЗрдЦрддрд╛ рд╣реВрдВ? рдЕрд░реЗ рдирд╣реАрдВ !!! рдЧреЛрд▓рд┐рдпрд╛рдВ рд╣рдорд╛рд░реЗ рднреВрддреЛрдВ рдХреЛ рдирд╣реАрдВ рдорд╛рд░рддреАрдВ рдХреНрдпрд╛ рдХрд░реЗрдВ? рдФрд░ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рд╣рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдЖрдпрдд рдмрдирд╛рдПрдЧреА - рдпрд╣ рдЙрдирдХреА рддреБрд▓рдирд╛ рдЯрдХрд░рд╛рд╡ рдореЗрдВ рдХрд░реЗрдЧреАред рдЕрдЧрд▓рд╛ рд╡рд┐рд╖рдп рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛ред

рдЯрдХрд░рд╛рд╡ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛


рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░реЗрдд рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рджреГрд╢реНрдп рд╣реИ, рд╣рдо рд╕рднреА рднреА рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рд╣рдорд╛рд░реЗ рдордВрдЪ рдкрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЗрди рд╕рднреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?

рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдбреБрдмреЛ рджрд┐рдпрд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рднреА рдирд┐рдХрд▓рд╛ рдХрд┐ рдореИрдВ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЧрдпрд╛ рдФрд░ рд╕рдбрд╝рдХ рдкрд░ рдЯрд╣рд▓рдиреЗ рдЪрд▓рд╛ рдЧрдпрд╛)) рд╕рдмрд╕реЗ рдХрдард┐рди рддрд░реАрдХрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рджрд┐рдЦрддрд╛ рд╣реИ ...

рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдмрд╣реБрдд рд╕реА рдмрд╛рддреЗрдВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ ... рдХрд╣реАрдВ GameView рд╡рд░реНрдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣рдо TestCollision () рд╡рд┐рдзрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

GameView.java рд╡рд░реНрдЧ рдХреЗ рдмрд╣реБрдд рдиреАрдЪреЗ
 /*  */ private void testCollision() { Iterator<Bullet> b = ball.iterator(); while(b.hasNext()) { Bullet balls = b.next(); Iterator<Enemy> i = enemy.iterator(); while(i.hasNext()) { Enemy enemies = i.next(); if ((Math.abs(balls.x - enemies.x) <= (balls.width + enemies.width) / 2f) && (Math.abs(balls.y - enemies.y) <= (balls.height + enemies.height) / 2f)) { i.remove(); b.remove(); } } } } 


рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ? рд╣рдо рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ рдХреЗ рдкреВрд░реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реВрдк рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдФрд░ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреА рдмреБрд▓реЗрдЯ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдкрд╣рд▓реЗ рд╣реЛрдЧреАред

рдЕрдЧрд▓рд╛, рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ рдФрд░ рд░рд┐рдбрд┐рдлрд╛рдЗрди рдХреА рдПрдХ рдЕрд▓рдЧ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдмрдирд╛рдПрдВ рдФрд░ рдХрд╣реЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрдЧрд▓рд╛ рджреБрд╢реНрдорди рд╕реНрдкреНрд░рд╛рдЗрдЯ рдкрд╣рд▓реЗ рд╣реЛрдЧрд╛ред рдФрд░ рд╣рдо рдПрдХ рд╢рд╛рдЦрд╛ рдСрдкрд░реЗрдЯрд░ рдмрдирд╛рддреЗ рд╣реИрдВ - рдЕрдЧрд░ () рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯрдХрд░рд╛рд╡ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ, рдореИрдВрдиреЗ рдЧрдгрд┐рддреАрдп рдлрд╝рдВрдХреНрд╢рди рдореЙрдбреНрдпреВрд▓ (рдПрдмреНрд╕) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬреЛ рдореБрдЭреЗ рджреЛ рдЖрдпрддреЛрдВ рд╕реЗ рдПрдХ рдкреВрд░реНрдг рдкреВрд░реНрдгрд╛рдВрдХ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

Ifa рдХреЗ рдЕрдВрджрд░, рджреЛ рдЖрдпрддреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ (X рд╕рдордиреНрд╡рдпрд┐рдд рдмреБрд▓реЗрдЯ рдкрд░ рдЧреЛрд▓реА рдорд╛рдЗрдирд╕ рдореЗрдВ рджреБрд╢реНрдорди рдХрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ X рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкрд░ рдЧреЛрд▓реА рдХреА рдЪреМрдбрд╝рд╛рдИ рд╕реЗ рдХрдо рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ, рджреБрд╢реНрдорди рдХреА рдЪреМрдбрд╝рд╛рдИ / 2 (рдЖрдпрдд рдХреЗ рдХреЗрдВрджреНрд░ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд)) рдФрд░ (рдореЙрдбреНрдпреВрд▓ Y рд╕рдордиреНрд╡рдп рдорд╛рдЗрдирд╕ рд╕реЗ рдмреБрд▓реЗрдЯ рд╣реИ) Y рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рджреБрд╢реНрдорди рдмреБрд▓реЗрдЯ рдХреА рдЪреМрдбрд╝рд╛рдИ рд╕реЗ рдХрдо рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реИ, рджреБрд╢реНрдорди рдХреА рдЪреМрдбрд╝рд╛рдИ / 2 (рдЖрдпрдд рдХреЗ рдХреЗрдВрджреНрд░ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ));

рдФрд░ рд╕рдм рдХреБрдЫ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдЕрдЧрд░ рдЧреЛрд▓реА рджреБрд╢реНрдорди рддрдХ рдкрд╣реБрдВрдЪ рдЧрдИ, рддреЛ рд╣рдо рдЙрд╕реЗ рджреГрд╢реНрдп рд╕реЗ рдорд┐рд▓рддреЗ рд╣реИрдВред

рдЦреИрд░, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рд░рди () рд╡рд┐рдзрд┐ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдЧреЗрдо рдСрдирдереНрд░реЗрдб рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╣реИ, рд╣рдорд╛рд░реЗ рдСрдирдбреНрд░рд╛рдЗрд╡ () рдбреНрд░рд╛рдЗрдВрдЧ рд╡рд┐рдзрд┐ рдХреЗ рдиреАрдЪреЗред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ:

Source: https://habr.com/ru/post/In136802/


All Articles