Суббота, 20 Апреля 2024, 05:23

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Записи участника » smach1 [17]
Результаты поиска
smach1Дата: Воскресенье, 08 Июля 2012, 12:47 | Сообщение # 1 | Тема: Задать в классе действие для любого объекта другого класса
был не раз
Сейчас нет на сайте
Интересно, почему никому не пришло в голову, что это клон Super Mario?) Успех Minecraft многим вскружил голову, но глупо все же рассчитывать начинающему программисту на повторение этого успеха, когда даже основ не знаешь. Нет, я всего лишь заменил абстрактные задачи на воплощение в жизнь конкретного проекта, очень упрощенного.
RUNGOGET2THECHOPAH, спасибо за развернутый ответ)
smach1Дата: Четверг, 07 Июня 2012, 13:32 | Сообщение # 2 | Тема: Задать в классе действие для любого объекта другого класса
был не раз
Сейчас нет на сайте
Нее, я неправильно сформировал вопрос. Массив указателей - это ясно. Но у меня существует не один экземпляр man, а несколько. И десятки тысяч элементом в массиве класса block. Проверять столкновение или иное взаимодействие каждого объекта класса man со всеми возможными координатами массива класса block - ресурсоемко как то. А вот если задать прямо в классе block проверку на столкновение с объектом класса man и соответствующее действие - получается гораздо более экономично. Но вот тут то и встает проблема того, что я могу проверить лишь столкновение с конкретным объектом класса, имя которого уже знаю заранее.
Если только экземпляр man тоже сделать массивом... Надо подумать над этим. А вообще хотелось бы узнать о возможности оперировать с абстрактным экземпляром класса
smach1Дата: Среда, 06 Июня 2012, 15:48 | Сообщение # 3 | Тема: Задать в классе действие для любого объекта другого класса
был не раз
Сейчас нет на сайте
Здравствуйте. Нужна помощь в следующем вопросе: есть ли возможность задать взаимодействие одного класса с любым объектом другого класса. Например есть класс block и класс man. Если использовать в классе block имя конкретного объекта класса man то это ясно и просто. А вот если создать 100-200 или гораздо больше объектов класса man то этот метод явно не подходит. Есть ли интересно решение моего вопроса?
smach1Дата: Воскресенье, 19 Февраля 2012, 19:59 | Сообщение # 4 | Тема: WindMill 2D Game Engine
был не раз
Сейчас нет на сайте
Если не количество и качество имеющихся готовых продуктов, что же тогда может иметь значение? Особенно для начинающего программиста, который еще не знаком с тонкостями
smach1Дата: Понедельник, 06 Февраля 2012, 16:45 | Сообщение # 5 | Тема: WindMill 2D Game Engine
был не раз
Сейчас нет на сайте
Я не догоняю, как воспользоваться этой функцией? Если просто вставить например в конец основного цикла Sleep(10), то все вычисления летят к чертям таким то, то есть все как бы работает, но мееееедлеееннннооооо. Это что теперь все переписывать, да и таймер не нужен? =(
smach1Дата: Воскресенье, 05 Февраля 2012, 21:54 | Сообщение # 6 | Тема: WindMill 2D Game Engine
был не раз
Сейчас нет на сайте
А у меня вот такой вопрос: когда запускаю компиляцию, или готовое приложение, процессор начинает ощутимо греться, особенно это заметно по нарастающему гулу кулера процессора) Где то на 5-8 градусов нагревается выше нормы, хотя приложение убогое донельзя - рисует к примеру один статичный спрайт и один анимированный, даже фона нету. И это не только на одном компьютере - на ноуте та же картина. И компьютер и ноут никак нельзя назвать старым железом, - все современные игрушки идут без проблем... Это вообще баг или фича?)
smach1Дата: Пятница, 27 Января 2012, 23:11 | Сообщение # 7 | Тема: WindMill 2D Game Engine
был не раз
Сейчас нет на сайте
Количество != качество. И никто же не имеет ничего против ас3, нет? Года три назад делал флеш баннеры на нем =) Тогда в нем только начала появляться поддержка 3д моделей, с тех пор я не очень интересовался, но рад слышать, что в планах ас3 подвинуть си
smach1Дата: Пятница, 27 Января 2012, 22:38 | Сообщение # 8 | Тема: WindMill 2D Game Engine
был не раз
Сейчас нет на сайте
Ну мб, не спорю) Но все же, если уж настраиваться на серьезные впоследствии проекты, то лучше сразу начать с плюсов, чем переучиваться потом.
smach1Дата: Пятница, 27 Января 2012, 22:18 | Сообщение # 9 | Тема: WindMill 2D Game Engine
был не раз
Сейчас нет на сайте
Холивары - это весело!

А если брать из области тех же игр, есть хотя бы несколько ААА класса? Нет.
Если просто немного поискать в инете на эту тему, на той же википедии посмотреть, то обнаружиться, что из сколько нибудь известных программ на делфи были написаны скайп, квип и неплохая игрушка "Космические рейнджеры". Не то чтобы совсем ничего, но все же негусто, а?
А если такой же вопрос задать в отношение c++?
Миллионы не могут ошибаться! =)
smach1Дата: Пятница, 27 Января 2012, 21:21 | Сообщение # 10 | Тема: WindMill 2D Game Engine
был не раз
Сейчас нет на сайте
хм, для интереса, можете назвать примеры "больших" проектов написанных на делфи?
smach1Дата: Пятница, 27 Января 2012, 12:24 | Сообщение # 11 | Тема: WindMill 2D Game Engine
был не раз
Сейчас нет на сайте
Попробовал ваш пример в действии. Все плохо biggrin Может быть указатель этот на объект класса нужно каким то особым образом объявить?
При отладке компилятор просто начинает глючить, ошибки выдает каждый раз разные, иногда проект даже компилируется, но ведет себя совсем не так как должен -изображение начинает прыгать, дергаться и т.п., а при закрытии выдает что то вроде "куча повреждена" и еще пару ошибок со ссылкой на библиотеки msvs
Рискну предположить, что каким то образом необходимо выделить определенный объем оперативной памяти под объект? Если я прав, то как же это провернуть?

Добавлено (27.01.2012, 12:24)
---------------------------------------------
Сам отвечу на свой вопрос, кому то пригодится мб

Объявлять объект класса нужно так, как написал Demeron, кроме одного момента: в теле главной функции Grnd = new ground[100]; так же удалять нужно с помощью оператора delete[]

smach1Дата: Понедельник, 23 Января 2012, 06:54 | Сообщение # 12 | Тема: WindMill 2D Game Engine
был не раз
Сейчас нет на сайте
Благодарю, буду пробовать
smach1Дата: Воскресенье, 22 Января 2012, 22:57 | Сообщение # 13 | Тема: WindMill 2D Game Engine
был не раз
Сейчас нет на сайте
Угу, спасибо. Тогда, если можно, еще вопрос

мне нужно создать несколько экземпляров одного класса и получить координаты каждого

Code

class ground
{
      int  x,y;
...
}
void ground::DrawGr(void)
{  
      DrawSprite(L"file.png",x,y);
}

ground *Grnd;

...

for(int i=0; i<1000;i+=100)  //цикл 9 раз подряд выводит один и тот же экземпляр
    {
      x=i;
      y=400;
      Grnd->DrawGr()
}


Метод срабатывает 9 раз, спрайт нарисован в требуемых координатах, но теперь при попытке обратиться к ним (координатам, например проверить столкновение с динамическим объектом) доступны только последние присвоенные, то есть x=900, y=400
Можно каким то образом использовать подобную конструкцию? Или же безперспективняк?
smach1Дата: Воскресенье, 22 Января 2012, 22:21 | Сообщение # 14 | Тема: WindMill 2D Game Engine
был не раз
Сейчас нет на сайте
Небольшой вопрос: создаю класс, в нем функция, рисующая спрайт по координатам x y. Ну, с созданием класса и экземпляра класса все понятно, все делал по прилагающемуся мануалу.
Однако при попытке обратиться к переменной x из функции другого класса либо из основного цикла программы (да откуда угодно) способом типа

Code
Zerat.x=15


выдает ошибку "knight *Zerat Выражение должно иметь тип класса". Выражение

Code
Zerat->x=15


вполне работает, но это вроде бы не то?
Примерный листинг
Code


class knight
{
public:
     float x,y;
     knight(void);
     void Draw();
};
knight::knight(void)
{
     x=100;
     y=250;
}

void knight::Draw(void)
{
     DrawSprite(L"file.png",x,y);
}

void game();

knight *Zerat;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
   IniEngine(L"Advanced animation",800,600,false);
     

   Zerat = new knight;

   RunEngine(game);
   delete Zerat;
   return 0;
}

void game()
{
         Zerat->Draw();
         Zerat.x++;                  // Ошибка: выражение слева от ".x" должно представлять класс, структуру или объединение

}



Сообщение отредактировал smach1 - Воскресенье, 22 Января 2012, 22:24
smach1Дата: Суббота, 07 Января 2012, 21:55 | Сообщение # 15 | Тема: Анимация движения
был не раз
Сейчас нет на сайте
Добавил в ваш код Sleep(30) после изменения координаты и все заработало!
Огромное спасибо, сам бы долго до этого не допер
smach1Дата: Суббота, 07 Января 2012, 07:54 | Сообщение # 16 | Тема: Анимация движения
был не раз
Сейчас нет на сайте
Это где то в дебрях исходного кода движка, но не суть важно, поскольку движок полностью рабочий и конструкция вида

Code

if(CheckKey(DIK_D)&&!keyp) //keyp изначально false
{
  curAnim=1;
  SetAnimation(anim,curAnim);
  keyp=true;
  x++;
}

td = timeGetTime() - startTime;
startTime = timeGetTime();
if(KeysCheck())
{
  switch(curAnim)
  {
    case 1: x+=step*td; break;
   ...
  }
}
else
{
  SetAnimationSpeed(anim,0);
  keyp=false;
}

if(!DrawSpriteA(anim, x,y)  // функция отвечает за воспроизведение анимации
{
  ResetAnimation(anim);  // перезапускает анимацию на конечном кадре
}



отлично работает: персонаж шагает вправо, пока нажата клавиша D и останавливается, когда клавиша отпущена.
Мне нужен цикл, который бы определенное время самовыполнялся. Само собой, еще пару дней втыкания в этот дурацкий косяк, и решение может и придет, но...
smach1Дата: Пятница, 06 Января 2012, 21:19 | Сообщение # 17 | Тема: Анимация движения
был не раз
Сейчас нет на сайте
Осваиваю движок windmill. Пытаюсь сделать простенькую анимацию движения объекта.
Суть такова: персонаж делает несколько шагов по нажатию клавиши. Определенное количество шагов, даже если на клавишу уже не жмут.
Проблемный фрагмент кода таков:

Code


if(KeyCheck(DIK_SPACE))
  {
   setK=true; //глобальная переменная, изначально false
  }
    
  if(setK)
  {
   
   int v1=x;

   while((x-v1)<50)
   {
    SetAnimation(anim,curAnim);
    x+=step*12;  // step = 0.09, глобальная константа
    Sleep(30);
   }

   setK=false;

  }

  else
  {
   SetAnimationSpeed(anim,0);
  }



В результате при нажатии на клавишу персонаж перемещается на эти 50 пикселей через ~1 секунду, но промежуточная анимация не отображается.
До этого пробовал вариант с функцией timeGetTime и выполнением каждого кадра в теле цикла через каждые 10 миллисекунд, однако результат был примерно тем же.

Очевидно, что я допускаю какую то грубую ошибку, но уже пол дня застрял на этом месте и не могу понять, в чем конкретно.
Форум игроделов » Записи участника » smach1 [17]
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг