Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 22.07.2008, 12:51   #1
KeipL
Нуждающийся
 
Аватар для KeipL
 
Регистрация: 07.07.2008
Адрес: Zp-UA
Сообщений: 58
Написано 4 полезных сообщений
(для 11 пользователей)
обсуждение статьи

Игруха на мобилу [Demo]
Привет! Сегодня я опять расскажу и покажу тебе возможности нашего друга MPascal-я. Но что мы будем делать в этот раз? Давай подумаем, что бы многие из нас хотели видеть у себя на мобиле? Ну конечно же игрушку! А круче если ее написал ты сам. В этой статье я расскажу тебе как это можно сделать. Правда, за сегодня мы с тобой контру не напишем, но вот не большую леталку сделаем.

Итак! Сегодня я предлагаю тебе сделать игру, в которой ты будешь управлять летящим самолетом. Все остальное (здания, вражеские танки и т.д.) сможешь добавить потом как твоей фантазии будет угодно, а я сегодня расскажу только про основы. Давай представим себе как это будет. На экране будет изображение самолета которое мы сможем поднимать и опускать по вертикали, наклонять влево или вправо, от чего он будет поворачивать, а о том, что он летит, а не парит в воздухе, будет свидетельствовать бегущая разметка взлетной полосы. Весь исходный текст, который я постарался хорошо прокомментировать, ты сможешь посмотреть в выложенном архиве проекта, а здесь я распишу только основное. Так что эту статью можно считать объяснением к исходнику. Для лучшего понимания советую рядом открыть исходный текст мидлета.

В начале создается тип «самолет» с его свойствами. Это делается так же, как и в Делфи. Далее идет описание процедуры, которая будет рисовать разметку на взлетной полосе. Вот тут я должен тебе объяснить как использовать процедуру DrawRect(x1,y1,x2,y2). Она рисует не закрашенный прямоугольник по двум точкам. Координаты первой точки указываются натуральные, а вот координаты второй точки уже отсчитываются от первой (как будто она теперь начало отсчета координат). Далее в коде идет объявление переменных которые нам понадобятся. В начале основного блока программы мы выводим картинку (заставка) в центр экрана. Что бы она была именно по центру, координаты X и Y рассчитываются по несложным формулам (например X:=половина ширины экрана минус половина ширины загруженного изображения). После прорисовки и задержки мы заполняем нашу структуру начальными значениями. Потом обнуляем наклон самолета, счетчик, который понадобится в дальнейшем при создании движущейся разметки, и устанавливаем начальные координаты для ее построения. Теперь запускаем цикл который будет продолжаться пока мы не нажмем на «0». В нем будет происходить самое интересное. В начале устанавливаем белый цвет и зарисовываем весь экран белым прямоугольником. Далее выводим на экран изображение самолета. Вот тут есть одна фишка. Наш самолет будет не просто сдвигаться тупо влево или вправо. Он будет наклоняться, и чем сильнее он будет наклонен, тем быстрее он будет сдвигаться в бок. Для этого необходимо при помощи любого графического редактора создать из одного изображения самолета по несколько повернутых в разные стороны. Примерно так:


sam1.png sam2.png sam3.png sam4.png sam5.png sam6.png sam7.png

Под каждым изображением находится его название. Назвать их надо именно так! Уже понял идею? Нажимая влево или вправо мы будем изменять переменные kren и position структуры Sam в соответствии с которыми будет происходить изменение положения самолета и загружено соответствующее изображение. Допустим мы два раза нажали вправо, значит нам надо загрузить изображение sam6.png, а перед этим установить position равным 6, а переменную kren увеличить на 2, в соответствии с которой самолет будет каждый цикл сдвигаться вправо на две точки. Переменная position может принимать значения только от 1 до 7. Загрузка изображения происходит следующим образом:

drawImage(loadImage('/sam'+chr(48+Sam.position)+'.png'),Sam.x,Sam.y);

Мы загружаем изображение с названием первой части sam, а вот вторая часть названия зависит от переменной position. ASCII код 48 это символ «0». Прибавляя к этому коду значение нашей переменной и преобразуя полученный результат из ASCII кода в символ, получаем необходимый нам символ цифры. К полученному названию изображения прибавляем расширение png и получаем полноценное название изображения.

Сейчас мы устанавливаем черный цвет и рисуем боковые полосы взлетной полосы. Потом цвет меняем на сине-серый и вызываем процедуру рисования разметки взлетной полосы, которой передаются координаты для начала рисования. Дальше получаем код удерживаемой клавиши и проверяем, что это за клавиша. Если нажата «2» или «8» то изображение самолета просто передвигается вверх или в низ с проверкой не улетел ли он за границы экрана. Если улетел, то возвращаем его на место. При нажатии на «4» или «6» переменная соответственно либо уменьшается, либо увеличивается, а после проверяется на допустимое значение. Так же изменяется переменная kren (отвечающая за наклон самолета). Ее значение тоже проверяется на допустимое. После всего этого идет непосредственно сдвиг самолета влево или вправо в соответствии с его наклоном при помощи конструкции Sam.x:=Sam.x+Sam.kren; Этот сдвиг происходит каждый цикл.

Дальше если самолет улетел за пределы экрана, он возвращается на место. Потом увеличивается счетчик на единицу. Этот счетчик используется для создания некоторой задержки при рисовании движущейся разметки взлетной полосы. Благодаря ему разметка будет передвигаться один раз за пять циклов что более красиво выглядит, чем один раз за один цикл. После того как разметка сдвинулась четыре раза, счетчик обнуляется, а координате Y присваивается первоначальное значение. Далее идет прорисовка всего выше нарисованного и задержка в 0.05 секунды.

Ну вот и все! Наш не большой симулятор авиа полетов готов. Надеюсь, что ты все понял и узнал что то новое для себя. Удачной компиляции
Исходник забираем отсюда:AirCraft
сама статья не моя, ее оригинал http://liveofpc.3dn.ru/publ/9-1-0-89

После реализа мною, когда я добавил пару-тройку функций начал просматривать код и оценивать, до меня дошло, что экран перерисовывается 40 раз в секунду, я может быть чтот не понимаю... или так должно быть... но мой симен например выдерживает это со скрипом...
(Offline)
 
Ответить с цитированием
Старый 22.07.2008, 14:33   #2
anton_obuhov
Оператор ЭВМ
 
Регистрация: 25.10.2007
Сообщений: 30
Написано одно полезное сообщение
(для 2 участников)
Re: обсуждение статьи

Это просто самоубийство столько раз экран прорисовывать, у тя телефон загнется лучше меньше сделай прорисовку (ты справку читал вообще???) если нет почитай функция repeat очень ресурсоемкая
(Offline)
 
Ответить с цитированием
Старый 22.07.2008, 17:24   #3
KeipL
Нуждающийся
 
Аватар для KeipL
 
Регистрация: 07.07.2008
Адрес: Zp-UA
Сообщений: 58
Написано 4 полезных сообщений
(для 11 пользователей)
Ответ: обсуждение статьи

ты прочитал мой комментарий? я его спец для всех жирным выделил...
(Offline)
 
Ответить с цитированием
Старый 23.07.2008, 08:33   #4
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: обсуждение статьи

1. Делать каждый раз DrawImage(LoadImage) это же тупизм. Такое можно применять разве что для заставок. Для игр важна скорость работы, а она будет низкой если мы каждый спрайт будем загружать с диска. Лучше уже сразу загрузить все картинки в массив и отображать их.
Кстати, достаточно будет и 1 спрайта самолета. Остальные можно сгенерировать библиотекой Lib_turn.
2. Забыл включить в настройках режим MIDP2.0 fullscreen
3. Вообще-то надо сначала разметку рисовать, а потом уже самолет, а то он какой-то прозрачный получается.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу учебники, статьи и прочее vadim2 PureBasic 17 06.10.2011 17:55
Starcraft & Warcraft [обсуждение] Raiter Игры / Games 23 30.07.2009 13:04
Ветка НУБа (было обсуждение правил) НУБ MJRG 6 05.04.2007 00:50
Обсуждение правил Raiter MJRG 51 27.03.2007 17:20
статьи по паскалю zwie Прочие вопросы 3 29.09.2006 12:37


Часовой пояс GMT +4, время: 04:30.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com