6.03.2014 / 19:57 | |
usb_device Пользователь Сейчас: Offline
Имя: Денис Откуда: USB Регистрация: 07.01.2013
| Немного разобрался с surfaceview. Думаю сделать простую игру, но столкнулся с тем что немного не пойму как лучше реализовать основной цикл игры, и место где отрисовывать. Будет два потока, один для игрового цикла, второй для управления. Ну а третий поток и так создается при создании сурфейса. Думаю реализовать отдельно логику игры, отдельно рисование. Если есть у кого то исходник простой игры, буду благодарен! Так как не особо понимаю как реализовать взаимосвязь между рисованием\логикой\управлением.
|
6.03.2014 / 20:36 | |
Salat-Cx65 Пользователь Сейчас: Offline
Имя: Сергей Откуда: Кременчуг Регистрация: 23.03.2010
| <оффтоп>Самоделкин, ты не Гост?</оффтоп>
|
6.03.2014 / 21:13 | |
Oak Пользователь Сейчас: Offline
Имя: Коля Откуда: Москва Регистрация: 02.06.2010
| Salat-Cx65, думаю, ты не разозлишься, если я скажу, что да — он Гост. Далее предлагаю без оффтопа.
__________________
Эль Презеденте |
6.03.2014 / 21:45 | |
usb_device Пользователь Сейчас: Offline
Имя: Денис Откуда: USB Регистрация: 07.01.2013
| Есть метод onDraw, прописанный здесь @Override public void run() { while (myThreadRun) { Canvas c = null; try { c = myThreadSurfaceHolder.lockCanvas(null); synchronized (myThreadSurfaceHolder) { myThreadSurfaceView.onDraw(c); } } finally { // do this in a finally so that if an exception is thrown // during the above, we don't leave the Surface in an // inconsistent state if (c != null) { myThreadSurfaceHolder.unlockCanvasAndPost(c); } } } Сам же метод реализуется в классе MySurfaceView extends SurfaceView implements SurfaceHolder.Callback Так же есть класс snake, в котором есть двухмерный массив-карта. Каким образом можно передать этот массив в onDraw что бы отрисовать карту. Использовать прямой доступ к массиву вроде snake.field[x][y] вроде не есть хорошо. Вообще метод может вернуть массив?
|
7.03.2014 / 01:29 | |
Dimon638 Пользователь Сейчас: Offline
Регистрация: 12.04.2011
| Вообще метод может вернуть массив?Конечно может. //метод, возвращающий массив
public int[][] someMethod(){
return new int[10][10];
}
|
7.03.2014 / 07:06 | |
samodelkin Пользователь Сейчас: Offline
Имя: Сергей Откуда: Липецк Регистрация: 05.11.2013
| usb_device (06.03.2014/19:57) Немного разобрался с surfaceview. Думаю сделать простую игру, но столкнулся с тем что немного не пойму как лучше реализовать основной цикл игры, и место где отрисовывать. Будет два потока, один для игИгровой цикл сделай в одном потоке, создай отдельные метод для прорисовки всех обьектов, потом метод обработки игровых событий, а управление сделай в методе онТоуч, например в нем можно осуществить проверку нажатия на одну из половин экрана, с помощью чего можно уже сделать притивное управление, а если добавить три области экрана- левую, среднюю и правую, то можно сделать почти любую игру, также управление можно сделать с помощью кнопок, которые помещаются в разметку вместе с сурфейсом и выводятся на экран.
|
7.03.2014 / 07:07 | |
samodelkin Пользователь Сейчас: Offline
Имя: Сергей Откуда: Липецк Регистрация: 05.11.2013
| Salat-Cx65 (06.03.2014/20:36) <оффтоп>Самоделкин, ты не Гост?</оффтоп>Сергея Гостова нет, теперь вместо него Сергей Самоделкин.
|
7.03.2014 / 17:27 | |
usb_device Пользователь Сейчас: Offline
Имя: Денис Откуда: USB Регистрация: 07.01.2013
| samodelkin, но ведь перерисовка, например у меня, в примере выше, происходит в методе onDraw. А если я например хочу сделать отдельный класс, в котором есть разные методы отрисовки разных элементов игры. И вызывать методы этого класса из основного цыкла игры в зависимости от текущих состояний, как тогда мне сделать так, что бы этот класс мог рисовать на экране.
|
7.03.2014 / 18:01 | |
samodelkin Пользователь Сейчас: Offline
Имя: Сергей Откуда: Липецк Регистрация: 05.11.2013
| usb_device, для рисования в любом месте класса существует класс SurfaceView, работать с которым очень просто, пример я выложил в раздел с полезными кодами.
|
7.03.2014 / 18:22 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| usb_device, не понял вопрос. Передаешь canvas куда нужно и рисуешь, напр.: enemy.draw(cnv).
|