Но так не работает метод getWindowManager()KamiSempai писал(а):Именно. Как Вы назовете параметр не так критично, но Класс должен быть Context.Arssir писал(а):А если проще объяснить? Вместо Activity activity нужно писать Context context?
Как сделать шашки на Android?
Re: Как сделать шашки на Android?
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Как сделать шашки на Android?
Посмотрел в самое начало и ужаснулся еще больше. Зачем для одного статичного метода целый класс создавать? И при чем тут размеры экрана когда Вы рисуете на View? Для этого нужно пользоваться getMeasuredWidth() и getMeasuredHeight().Arssir писал(а):Возникла еще одна странная проблема. Я хочу разместить картинку шахматного поля по центру экрана, картинка - квадратная. Я задал ей размер ширины и высоты, равный ширине экрана, вписывается идеально. Чтобы разместить ее по центру я задал координату Y равную половине высоты экрана минус половина высоты картинки. По идеи должен получится квадрат в центре экрана, но поле смещается немного вниз. Предполагаю, что это из-за панели сверху экрана показывающую время, зарядку и тому подобное, а также название приложения. Если проблема не в этом все равно хотелось бы узнать как избавится от этих панелей.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Как сделать шашки на Android?
Я использую те методы которые знаю, о существовании getMeasuredHeight() ни в одном известном мне учебнике не сказано. В классе Size у меня уже не один метод, а несколько, которые высчитывают мне необходимые размеры. Так было удобнее и компактней, но теперь благодаря getMeasuredHeight(), наверно потребность в этом классе отпала.KamiSempai писал(а):Посмотрел в самое начало и ужаснулся еще больше. Зачем для одного статичного метода целый класс создавать? И при чем тут размеры экрана когда Вы рисуете на View? Для этого нужно пользоваться getMeasuredWidth() и getMeasuredHeight().
И все таки, как избавится от панели сверху?
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Как сделать шашки на Android?
Нужно в манифесте для своей активити выбрать тему с припиской NoTitlebar. Например, @android:style/Theme.Black.NoTitleBarArssir писал(а):И все таки, как избавится от панели сверху?
Вот откопал интересную тему по созданию нестандартных компонентов: http://habrahabr.ru/post/176643/
Когда-то эта статья мне очень помогла. Надеюсь и Вам поможет.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Как сделать шашки на Android?
Название убралось, а вот панель времени и зарядки нет.KamiSempai писал(а):Нужно в манифесте для своей активити выбрать тему с припиской NoTitlebar. Например, @android:style/Theme.Black.NoTitleBarArssir писал(а):И все таки, как избавится от панели сверху?
Re: Как сделать шашки на Android?
[syntax=java]
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// requesting to turn the title OFF
requestWindowFeature(Window.FEATURE_NO_TITLE);
// making it full screen
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
}
[/syntax]
С английским в гугл траслейтор.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// requesting to turn the title OFF
requestWindowFeature(Window.FEATURE_NO_TITLE);
// making it full screen
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
}
[/syntax]
С английским в гугл траслейтор.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Как сделать шашки на Android?
@android:style/Theme.Black.NoTitleBar.FullscreenArssir писал(а):Название убралось, а вот панель времени и зарядки нет.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Как сделать шашки на Android?
Я уже написал большую часть приложения, но код получается очень громоздким и запутанным. Во многом из-за обилия картинок, и того что всю графику я рисовал внутри основного View класса в методе protected void onDraw(Canvas canvas) {} Он получился больше 120 строчек длинной и состоит в основном из элементов canvas.drawBitmap(картинка, х, у, null); и логических условий их выполнения. А вся логика игры и координаты картинок разбросаны по нескольким разным классам. Вообщем хаос. Мне бы хотелось узнать можно ли как то переложить графику на другие классы, чтобы картинка рисовалась там же, где и условие при котором она рисуется.
Или каким-то образом сослаться на другой класс или отправить ее туда.
Или каким-то образом сослаться на другой класс или отправить ее туда.
Re: Как сделать шашки на Android?
показывай код и мы посмотрим =)
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Как сделать шашки на Android?
Тут скорее всего вопрос больше по архитектуре.rezak90 писал(а):показывай код и мы посмотрим =)
Чего вы там такого делаете, что у вас прорисовка на 120 строк получилась? Там всего-то нужно пару циклов, один рисует шахматную доску, другой фигуры, и еще одна строка для выделения выбранной фигуры.Arssir писал(а):Я уже написал большую часть приложения, но код получается очень громоздким и запутанным. Во многом из-за обилия картинок, и того что всю графику я рисовал внутри основного View класса в методе protected void onDraw(Canvas canvas) {} Он получился больше 120 строчек длинной и состоит в основном из элементов canvas.drawBitmap(картинка, х, у, null); и логических условий их выполнения. А вся логика игры и координаты картинок разбросаны по нескольким разным классам. Вообщем хаос. Мне бы хотелось узнать можно ли как то переложить графику на другие классы, чтобы картинка рисовалась там же, где и условие при котором она рисуется.
Или каким-то образом сослаться на другой класс или отправить ее туда.
Графику на другие классы перекладывать не советую, потом самому можно запутаться. В идеале должно хватить 4 классов:
1) View отображающий доску. В него передается массив с фигурами. А еще он должен обрабатывать касания и передавать информацию о нажатой позиции через колбэк.
2) Класс с логикой игры. В него передаются действия игрока (взял фигуру, передвинул ее). Естественно их нужно проверять на корректность. А еще у него тоже должен быть колбэк, который информирует о каких либо игровых действиях. Например если мы кликнули по доске, View через колбэк сообщила о позиции, после чего мы передали в этот класс информацию о клике по ячейке,если в этой ячейке есть наша шашка, она должна выделиться, если шашка уже выделена и мы ходим, шашку нужно передвинуть. Вся эта информация должна идти из класса логики через колбэки.
3) Activity в которой описана связь между доской и классом логики. Вся обработка колбеков осуществляется в ней.
4) Искусственный интеллект. Обдумывает ход, после чего имитирует нажатие по доске. Думать он должен в другом потоке.
Вот и все. Самым сложным тут будет искусственный интеллект. Остальное раз плюнуть.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Как сделать шашки на Android?
Да вы правы, класс прорисовки скорее больше логикой игры забит, попробую перенести ее в другой класс.KamiSempai писал(а):Чего вы там такого делаете, что у вас прорисовка на 120 строк получилась? Там всего-то нужно пару циклов, один рисует шахматную доску, другой фигуры, и еще одна строка для выделения выбранной фигуры.
Я пока что делаю игру на двоих, искусственный интеллект - это слишком сложно.KamiSempai писал(а):Вот и все. Самым сложным тут будет искусственный интеллект. Остальное раз плюнуть.
Re: Как сделать шашки на Android?
Как насчет такой архитектуры? Если словами:
Код: Выделить всё
Класс активити {
убрать панели;
установить вью;
}
Класс Вьюв {
МассивСписок <Шашка> Шашки = новый МассивСписок <Шашка>();
Конструктор(){
циклы 2 раза по 8 создать новую шашку вычисляя при этом координаты и поместить в МассивСписок Шашки;
загрузить картинки;
}
наПрорисовку(){
нарисовать доску;//вроде очевидно
цикл для номер_шашки от 0 до Шашки.размер(){
нарисоватьКруг(Шашки.взять(номер_шашки).координаты.х, Шашки.взять(номер_шашки).координаты.у, Шашки.взять(номер_шашки).диаметр)
}
наНажатие(){
определяем тип прикосновения и
если нажатие то определяем на какую нажали и можно ли ее выделить; //(могу описать подробнее)
иначе если движение то перерисовываем ту область где шашка движется;
иначе если отпустили то определяем допустим ли выполненный ход игрока, если допустим то если убили в процессе хода то вычислить номер_убитой и обозначить Шашки.взять(номер_убитой).убита=да;
}
}
Класс Шашка {
Координаты;
Диаметр;
Цвет;
булева убита=нет;
Конструктор(х, у, д, ц) { //понятно что тут
}
}Re: Как сделать шашки на Android?
Arssir, не сделал еще шашки? свистни потом, с удовольствием поиграем, жду не дождусь уже.
Ты сетевую делаешь?
Ты сетевую делаешь?
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Как сделать шашки на Android?
Доходчиво.Nyashka писал(а):Если словами:
Re: Как сделать шашки на Android?
шашка может стать дамкой, не?Nyashka писал(а):Как насчет такой архитектуры? Если словами:Код: Выделить всё
Класс активити { убрать панели; установить вью; } Класс Вьюв { МассивСписок <Шашка> Шашки = новый МассивСписок <Шашка>(); Конструктор(){ циклы 2 раза по 8 создать новую шашку вычисляя при этом координаты и поместить в МассивСписок Шашки; загрузить картинки; } наПрорисовку(){ нарисовать доску;//вроде очевидно цикл для номер_шашки от 0 до Шашки.размер(){ нарисоватьКруг(Шашки.взять(номер_шашки).координаты.х, Шашки.взять(номер_шашки).координаты.у, Шашки.взять(номер_шашки).диаметр) } наНажатие(){ определяем тип прикосновения и если нажатие то определяем на какую нажали и можно ли ее выделить; //(могу описать подробнее) иначе если движение то перерисовываем ту область где шашка движется; иначе если отпустили то определяем допустим ли выполненный ход игрока, если допустим то если убили в процессе хода то вычислить номер_убитой и обозначить Шашки.взять(номер_убитой).убита=да; } } Класс Шашка { Координаты; Диаметр; Цвет; булева убита=нет; Конструктор(х, у, д, ц) { //понятно что тут } }
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Как сделать шашки на Android?
Там много чего упущено, я лишь архитектуру описывал. Так же опущено как мы получаем координаты и как они изменяютсяanber писал(а): шашка может стать дамкой, не?
Если нужны подробности я с радостью поясню каждый из этапов.
Про шашку-дамку это добавить свойство:
Булева дамка = нет;
в свойства класса Шашка и менять это свойство на 'да' когда в результате хода игрока передвигаемая шашка по Y оказалась за пределами какой то относительной координаты для одного цвета, и до какой то координаты для другого цвета
Re: Как сделать шашки на Android?
У меня нету View, я всю графику и логику сделал при помощи методов:Nyashka писал(а):Как насчет такой архитектуры? Если словами:Код: Выделить всё
Класс активити { убрать панели; установить вью; } Класс Вьюв { МассивСписок <Шашка> Шашки = новый МассивСписок <Шашка>(); Конструктор(){ циклы 2 раза по 8 создать новую шашку вычисляя при этом координаты и поместить в МассивСписок Шашки; загрузить картинки; } наПрорисовку(){ нарисовать доску;//вроде очевидно цикл для номер_шашки от 0 до Шашки.размер(){ нарисоватьКруг(Шашки.взять(номер_шашки).координаты.х, Шашки.взять(номер_шашки).координаты.у, Шашки.взять(номер_шашки).диаметр) } наНажатие(){ определяем тип прикосновения и если нажатие то определяем на какую нажали и можно ли ее выделить; //(могу описать подробнее) иначе если движение то перерисовываем ту область где шашка движется; иначе если отпустили то определяем допустим ли выполненный ход игрока, если допустим то если убили в процессе хода то вычислить номер_убитой и обозначить Шашки.взять(номер_убитой).убита=да; } } Класс Шашка { Координаты; Диаметр; Цвет; булева убита=нет; Конструктор(х, у, д, ц) { //понятно что тут } }
protected void onDraw(Canvas canvas)
{
...
} и
public boolean onTouchEvent(MotionEvent event)
{
...
}
игра уже рабочая можно играть вдвоем на одном экране. Сейчас думаю как сделать анимацию, но проблема в том что при моей реализации графики, стандартную анимацию сделать не возможно. Все статьи которые я смотрел на эту тему, используют xml файлы, а я так не могу. Думаю единственным вариантом для меня сейчас - использовать Timer, и по нему перемещать координаты картинок.
Я обязательно сделаю сетевой режим (попробую)), но пока для меня главная задача это - анимация.Foenix писал(а):Arssir, не сделал еще шашки? свистни потом, с удовольствием поиграем, жду не дождусь уже.
Ты сетевую делаешь?
Re: Как сделать шашки на Android?
Так членами какого класса являются обработчики нажатий и прорисовки, если не View или SurfaceView? (Сорри если ответ на этот вопрос был в этой теме, просто хочется быстро подсказать)Arssir писал(а): У меня нету View, я всю графику и логику сделал при помощи методов:
protected void onDraw(Canvas canvas)
{
...
} и
public boolean onTouchEvent(MotionEvent event)
{
...
}
Вот кусок кода для работы с таймером:
Код: Выделить всё
Timer timer;
TimerTask tTask;
//...
// где то в onCreate() или в конструкторе класса
timer = new Timer();
schedule(); //запуск таймера
//...
void schedule(){
if (tTask != null) tTask.cancel();
tTask = new TimerTask() {
public void run() {//что делаем по таймеру. к примеру, вызываем перерисовку
postInvalidate();
}
};
timer.schedule(tTask, 120, 40); //40 - это интервал работы таймера
}
Re: Как сделать шашки на Android?
У меня весь MainActivity, выглядит так...Nyashka писал(а):Так членами какого класса являются обработчики нажатий и прорисовки, если не View или SurfaceView? (Сорри если ответ на этот вопрос был в этой теме, просто хочется быстро подсказать)Arssir писал(а): У меня нету View, я всю графику и логику сделал при помощи методов:
protected void onDraw(Canvas canvas)
{
...
} и
public boolean onTouchEvent(MotionEvent event)
{
...
}
Вот кусок кода для работы с таймером:У себя в программе я по другому использую таймер, а это отрывок из примера как сделать змейку http://davidmd.ru/2012/02/24/%D0%BF%D0% ... 2%D1%8C-1/Код: Выделить всё
Timer timer; TimerTask tTask; //... // где то в onCreate() или в конструкторе класса timer = new Timer(); schedule(); //запуск таймера //... void schedule(){ if (tTask != null) tTask.cancel(); tTask = new TimerTask() { public void run() {//что делаем по таймеру. к примеру, вызываем перерисовку postInvalidate(); } }; timer.schedule(tTask, 120, 40); //40 - это интервал работы таймера }
Код: Выделить всё
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GView v = new GView(this);
setContentView(v);
}
}Код: Выделить всё
public GView(Context context) { super(context); }
protected void onDraw(Canvas canvas)
{
...
}
public boolean onTouchEvent(MotionEvent event)
{
...
}
Re: Как сделать шашки на Android?
Таки есть View. У View есть метод postInvalidate() для вызова перерисовки (произойдет вызов onDraw). Код таймера приводил выше, его надо занести в код класса вьюва, а в конструктор или в onCreate занести первый вызов таймера. Возможно вы это уже и сами поняли, я только только с этим разобрался и решил поделиться =)Arssir писал(а): GView - класс наследуемый от View