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

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

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

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

Ответ
 
Опции темы
Старый 21.09.2007, 22:08   #1
Neutrin0
AnyKey`щик
 
Регистрация: 16.09.2007
Сообщений: 1
Написано 0 полезных сообщений
(для 0 пользователей)
Как одновременно анимировань несколько обьектов

Не могу разобраться, как к примеру сделать, чтоб летела пуля, выпущенная персонажем, сам фон игры был анимирован(движение обьектов сверху вниз рандомно) и при этом чтоб игрок мог продолжать управлять персонажем и срелять не по одному снаряду, а по нескольку. Пробовал делать всё внутри цикла repeat..until, выносить движение пули, и фона в отдельные repeat..until, но тогда внутри них приходится прописывать и отрисовку всего остального, а потом сравнивать координаты(громоздко и все равно не то, что нужно), через функции не получилось.
опыта программирования почти нет.
(Offline)
 
Ответить с цитированием
Старый 21.09.2007, 22:21   #2
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Re: Как одновременно анимировань несколько обьектов

Попробуй это:
http://www.boolean.name/showthread.php?t=3685
(Offline)
 
Ответить с цитированием
Старый 21.09.2007, 22:38   #3
ARV
ПроЭктировщик
 
Регистрация: 25.12.2006
Сообщений: 163
Написано 7 полезных сообщений
(для 12 пользователей)
Re: Как одновременно анимировань несколько обьектов

плохо, что МР не поддерживает масиивы записей и вообще с многомерными массивами не очень работает... в общем, я решал проблему "многозадачности" движения объектов так: делал массив координат всех объектов, массив номеров текущего спрайта, в общем - кучу массивов, в которых хранились все параметры, необходимые для анимации. Потом в основном цикле вызывал процедуру рисования всех объектов, которая в цикле брала i-ый элемент из всех массивов и на их основе рисовала i-й объект... получалось, в основном цикле вызывается только одна процедура, что в общем не мешает работе с клавиатурой и т.п.
Где-то я выкладывал тут на форуме свой проект на этом принципе..."Муха" назывался кажется... в наработках по-моему...
(Offline)
 
Ответить с цитированием
Старый 21.09.2007, 23:39   #4
Frank
Нуждающийся
 
Аватар для Frank
 
Регистрация: 22.07.2006
Сообщений: 50
Написано 6 полезных сообщений
(для 19 пользователей)
Re: Как одновременно анимировань несколько обьектов

Сообщение от ARV
плохо, что МР не поддерживает масиивы записей
Вроде все поддерживается...
например так:

const MansCount=2567;				// Общее кол-во человек в базе

type typMans = record						// Тип записи про человека
	name: string;									// Ф.И.О.
	addr: string;									// Адрес
	numb: string;									// Телефон
end;

var Man: array [1..MansCount] of typMans;	// Массивчик для людей


//  ....................... и т.д.
Man[i].name:='Вован';
(Offline)
 
Ответить с цитированием
Старый 22.09.2007, 01:16   #5
Trilliput
Знающий
 
Регистрация: 27.07.2006
Сообщений: 250
Написано 6 полезных сообщений
(для 7 пользователей)
Re: Как одновременно анимировань несколько обьектов

Может поможет.

//для удобства зададим числа для размера массива в начале
const
min_bullets=1; //минимальное количество пуль
max_bullets=20;//максимальное кол-во пуль
//создадим тип данных типа record, те "название типа" bulletType, в нем содержаться переменные x,y и скорости пули, картинка пули
type bulletType = record
 bullet_x,bullet_y,bullet_speed: integer;
 bullet_img:image;
end;
//переменные
var
game:boolean;//используется для того что бы определять выполняется главный цикл игры или нет
bullets_arr:array[min_bullets..max_bullets] of bulletType;//массив пуль типа bulletType, размером от min_bullets до max_bullets,
//в каждой ячейке массива содержиться запись с полями x,y, скорости и картинки пули.
bullet_img:image;//картинка пули для массива
i,lastBulletUpdate:integer;//i - вспомогательная переменная, lastBulletUpdate - относительное время в миллисекундах
//Начало самой программы, начинаем назначать переменные, заполнять массив, вобщем подготавливаем данные для игры
begin
LastBulletUpdate := GetRelativeTimeMs; // запоминаем время (значенеи представляет из себя просто число в целом (integer) формате
game:=true; // это нужно для того что бы заработалглавный цикл
bullet_img:=loadImage('/icon.png');//загрузка картинки пули, используется стандартный значек в midletpascal, для совместимости
//начинаем запонять массив данными
for i:=min_bullets to max_bullets do //начинается цикл который выполниться от min_bullets До max_bullets (те 20 раз, мы установили значение этой константы в начале) раз
 begin
 //принцип заполнение массива типа record такой: имя_массива[номер ячейки].переменная_которая_есть_в_данном_типе:=значение;
  bullets_arr[i].bullet_x:=random(getWidth);//ставим положение по x (ширина) случайным (при помощи random()) значение которого от 0 до getWidth (функция возвращает ширину экрана телефона, те x)
  bullets_arr[i].bullet_y:=0;//ставим y=0, тк пуля должна по задумке падать :) те ставим на самый верх экрана. Y - высота
  bullets_arr[i].bullet_img:=bullet_img; //назначаем ячейке под номером i и полю которая в нем содержиться рисунок который мы ранее загрузили в переменную bullet_img
  bullets_arr[i].bullet_speed:=random(3)+1;//ставим случайно скорость пули от 1 до 4, "+1" нужно для того, что бы скорость не была равна 0 (random возвращает значение от 0)
 end;
//главный цикл(цыкл) :))
while (game=true) do //"пока game=true выполнять следующий код"
  begin
 
  while isMidletPaused do//смысл в следующем:"если мидлет приостоновлен (свернули, приостоновили - те например вышли на главный экран у мобилы) 
    begin         // то выполнять следующий код - "задержка 100 мсек". Все это нужно что бы в свернутом состоянии мидлет не грузил телефон - становился на "паузу"
      delay(100); 
    end;  
  if getKeyClicked = KE_KEY1 then //"если нажать 1 то game станет равно false" и мидлет завершит свою работу
   begin
    game:=false;
   end;
 
setColor(0, 0, 0);//ставим цвет рисования rgb как черный
fillRect(0, 0, getwidth, getheight); //рисуем черный квадрат во весь экран, это нжно для того что бы за объектами не оставался шлейф 
//смысл в следующем: в самом начале кода мы запомнили значение LastBulletUpdate, теперь вычитая из текушего значения времени (GetRelativeTimeMs) ранее запомненое значение LastBulletUpdate мы получим сколько прошло с того момента,
//если значение >100 (те 0.1 сек(1000=1сек)) выполняется нижеследующий код.
if ((GetRelativeTimeMs - LastBulletUpdate) > 100) then 
begin 
 LastBulletUpdate := GetRelativeTimeMs;//снова запоминаем текущее время, оно нам понадобиться для того что бы узнать что снова прошло еще 0.1сек
//начинаем перебор массива 
for i:=min_bullets to max_bullets do
 begin 
  bullets_arr[i].bullet_y:=bullets_arr[i].bullet_y+bullets_arr[i].bullet_speed;//увеличиваем y (высоту) положения пули на скоростьс которой она литит
  //проверяем если пуля ушла ли пуля за экран (те опустилась ниже высоты экрана)
 if bullets_arr[i].bullet_y>=getheight then
  begin
  //если условие выполняется, те пуля ниже высоты экрана
   bullets_arr[i].bullet_y:=0;//поднимает пулю опять на верх
   bullets_arr[i].bullet_speed:=random(3)+1;//снова случайно назначаем скорость пули
   bullets_arr[i].bullet_x:=random(getwidth);//и случайно ставим по ширине экрана
  end;
end;
end;
//теперь снова перебирая массив пуль отрисовываем каждую пулю в определенной точке экрана, этот перебор нужен потому,что если поствить его в предыдущий (где изменяется координаты пули) пуля будет отрисовывать только раз в секунду.
for i:=min_bullets to max_bullets do
begin
 drawImage(bullets_arr[i].bullet_img, bullets_arr[i].bullet_x, bullets_arr[i].bullet_y);
end;
//обновляем экран
repaint;
end;
end.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сглаживание ребристости обьектов Alex_Noc 3D-программирование 13 16.06.2012 23:56
вставка обьектов Max Payne 3D-программирование 5 03.02.2009 21:26
Две библиотеки одновременно Frank Основной форум 5 18.08.2008 08:24
Расстановка физических обьектов. Черный крыс Blitz3D 17 06.01.2008 18:57
Столкновение обьектов из одного типа Atomikc 2D-программирование 2 21.05.2007 18:36


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


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