Здравствуйте! Помогите пожалуйста в реализации приложения под Android. Значит имеется склад, в нем имееются ящики, так же на складе есть работник который двигает эти ящики. пользователь выступает в качестве наблюдателя. вот что я уже имею | Код | //GameView.java package pinocio.sclad; import android.util.AttributeSet; import android.view.*; import android.content.*; import android.graphics.*; public class GameView extends SurfaceView implements SurfaceHolder.Callback { /** * Область рисования */ private SurfaceHolder mSurfaceHolder; /** * Поток, рисующий в области */ private GameManager mThread; /** * Конструктор * @param context * @param attrs */ public GameView(Context context, AttributeSet attrs) { super(context, attrs); // подписываемся на события Surface mSurfaceHolder = getHolder(); mSurfaceHolder.addCallback(this); mThread = new GameManager(mSurfaceHolder, context); } @Override /** * Изменение области рисования */ public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { mThread.initPositions(height, width); } @Override /** * Создание области рисования */ public void surfaceCreated(SurfaceHolder holder) { mThread.setRunning(true); mThread.start(); } @Override /** * Уничтожение области рисования */ public void surfaceDestroyed(SurfaceHolder holder) { boolean retry = true; mThread.setRunning(false); while (retry) { try { // ожидание завершение потока mThread.join(); retry = false; } catch (InterruptedException e) { } } } }
|
и собственно сам класс рисования. | Код | //GameManager.java package pinocio.sclad; import android.util.AttributeSet; import android.view.*; import android.content.*; import android.content.res.Resources; import android.graphics.*; import android.graphics.Paint.Style; public class GameManager extends Thread { private static final int FIELD_WIDTH = 300; private static final int FIELD_HEIGHT = 250; /** Область, на которой будем рисовать */ private SurfaceHolder mSurfaceHolder; /** Состояние потока (выполняется или нет. Нужно, чтобы было удобнее прибивать поток, когда потребуется) */ private boolean mRunning; /** Стили рисования */ private Paint mPaint; /** Прямоугольник игрового поля */ private Rect mField; /** Ресурсы приложения */ private Resources mRes; /** * Инициализация положения объектов, в соответствии с размерами экрана * @param screenHeight Высота экрана * @param screenWidth Ширина экрана */ public void initPositions(int screenHeight, int screenWidth) { int left = (screenWidth - FIELD_WIDTH) / 2; int top = (screenHeight - FIELD_HEIGHT) / 2; mField.set(left, top, left + FIELD_WIDTH, top + FIELD_HEIGHT); } /** * Конструктор * @param surfaceHolder Область рисования * @param context Контекст приложения */ public GameManager(SurfaceHolder surfaceHolder, Context context) { mSurfaceHolder = surfaceHolder; mRunning = false; mPaint = new Paint(); mPaint.setColor(Color.BLUE); mPaint.setStrokeWidth(2); mPaint.setStyle(Style.STROKE); mField = new Rect(); } /** * Задание состояния потока * @param running */ public void setRunning(boolean running) { mRunning = running; } @Override /** Действия, выполняемые в потоке */ public void run() { while (mRunning) { Canvas canvas = null; try { // подготовка Canvas-а canvas = mSurfaceHolder.lockCanvas(); synchronized (mSurfaceHolder) { // собственно рисование canvas.drawRect(mField, mPaint); } } catch (Exception e) { } finally { if (canvas != null) { mSurfaceHolder.unlockCanvasAndPost(canvas); } } } } }
|
теперь мне необходимо создать класс для ящика и работника, но я не могу понять как реализовать ихнее перемещение по складу. а после создания класов их необходимо прорисовать в классе GameManager Гуру программисты помогите чайнику ))
|