Золотые страницы форума GP2X Community
Новостной форум посвященный консолям GP2X
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   СудокуСудоку    Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Портирование игры Me and my shadow

 
Начать новую тему   Ответить на тему    Список форумов GP2X Community -> Портирование для консолей
Предыдущая тема :: Следующая тема  
Автор Сообщение
Otto Baynes

Постоялец


Пол: Пол:Мужской
Возраст: 36
Зарегистрирован: 19.01.2012
Сообщения: 42

Группы: Нет

СообщениеДобавлено: Ср Янв 25, 2012 8:43 pm    Заголовок сообщения: Портирование игры Me and my shadow Ответить с цитатой

Пробую портировать игру, компилирую так:

Код:
$cmake . -DCMAKE_CC_COMPILER=arm-gph-linux-gnueabi-gcc -DCMAKE_CXX_COMPILER=arm-gph-linux-gnueabi-g++

Затем:
Код:
$make
...
...
...
Scanning dependencies of target meandmyshadow
Linking CXX executable meandmyshadow
/home/mashin/dev/GPH_SDK/tools/gcc-4.2.4-glibc-2.7-eabi/bin/../lib/gcc/arm-gph-linux-gnueabi/4.2.4/../../../../arm-gph-linux-gnueabi/bin/ld: cannot find -lSDLmain
collect2: ld returned 1 exit status
make[2]: *** [meandmyshadow] Ошибка 1
make[1]: *** [CMakeFiles/meandmyshadow.dir/all] Ошибка 2
make: *** [all] Ошибка 2


Компилируется нормально, но на стадии сборки ld не находит некий SDLmain.
Не подскажите что тут можно сделать?

_________________
Мой блог
Мой эмулятор CHIP-8 и Super CHIP


Последний раз редактировалось: Otto Baynes (Сб Янв 28, 2012 3:33 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профильOtto Baynes сейчас оффлайн  Отправить личное сообщение Посетить сайт автора
Hahahoj

Site Admin


Пол: Пол:Мужской
Возраст: 50
Зарегистрирован: 08.10.2008
Сообщения: 1848

Группы: 
[ Команда сайта ]
[Модераторы Модераторы ]


СообщениеДобавлено: Чт Янв 26, 2012 12:38 am    Заголовок сообщения: Ответить с цитатой

SDLMain это специфическая либа SDL-а под Кену и Виз.
Добавить параметром компиляции вместе с SDL и добавить альтернативный каталог для поиска либ. Относительно корня СДК он лежит в подпапке DGE/lib/target при компиляции для консоли и DGE/lib/host при компиляции для компа.

_________________
Просто Вовк
Вернуться к началу
Посмотреть профильHahahoj сейчас оффлайн  Отправить личное сообщение
Otto Baynes

Постоялец


Пол: Пол:Мужской
Возраст: 36
Зарегистрирован: 19.01.2012
Сообщения: 42

Группы: Нет

СообщениеДобавлено: Пт Янв 27, 2012 2:10 pm    Заголовок сообщения: Ответить с цитатой

Спасибо.
Как это сделать в cmake я не понял, но получилось скомпилировать игру написав свой makefile Smile

Игра уже запускается на caanoo, теперь надо переделать управление на кнопки и разобраться почему изображение слишком сильно мерцает.

_________________
Мой блог
Мой эмулятор CHIP-8 и Super CHIP
Вернуться к началу
Посмотреть профильOtto Baynes сейчас оффлайн  Отправить личное сообщение Посетить сайт автора
Otto Baynes

Постоялец


Пол: Пол:Мужской
Возраст: 36
Зарегистрирован: 19.01.2012
Сообщения: 42

Группы: Нет

СообщениеДобавлено: Пт Янв 27, 2012 2:44 pm    Заголовок сообщения: Ответить с цитатой

С мерцанием экрана разобрался. Надо было использовать неофициальную sdl с поддержкой двойной буферизации.
_________________
Мой блог
Мой эмулятор CHIP-8 и Super CHIP
Вернуться к началу
Посмотреть профильOtto Baynes сейчас оффлайн  Отправить личное сообщение Посетить сайт автора
Hahahoj

Site Admin


Пол: Пол:Мужской
Возраст: 50
Зарегистрирован: 08.10.2008
Сообщения: 1848

Группы: 
[ Команда сайта ]
[Модераторы Модераторы ]


СообщениеДобавлено: Сб Янв 28, 2012 10:40 am    Заголовок сообщения: Ответить с цитатой

Otto Baynes писал(а):
Спасибо.
теперь надо переделать управление на кнопки

Кусочек кода из yeti с идеей отлова осей как кнопок:

Код:
   while(done==0){
      sdl3d_flip();
      keys = SDL_GetKeyState(NULL);
      if ( SDL_PollEvent(&event) ) {
         switch (event.type) {
         case SDL_JOYAXISMOTION:
            switch(event.jaxis.axis) {
            case 0:
               if(event.jaxis.value<-16000) {
                  yeti.keyboard.left = 1;
                  yeti.keyboard.right = 0;
               } else if(event.jaxis.value>16000) {
                  yeti.keyboard.left = 0;
                  yeti.keyboard.right = 1;
               } else {
                  yeti.keyboard.left = 0;
                  yeti.keyboard.right = 0;
               }
               break;
            case 1:
                                       if(event.jaxis.value<-16000) {
                                                yeti.keyboard.up = 1;
                                                yeti.keyboard.down = 0;
                                        } else if(event.jaxis.value>16000) {
                                                yeti.keyboard.up = 0;
                                                yeti.keyboard.down = 1;
                                        } else {
                                                yeti.keyboard.up = 0;
                                                yeti.keyboard.down = 0;
                                        }
               break;
            }
            break;
         }


Дальше всё много проще:
Код:
#ifdef _CAANOO
/* CAANOO button mapping */
enum MAP_KEY
{
    VK_FA        ,
    VK_FX        ,
    VK_FB        ,
    VK_FY        ,
    VK_FL        ,//=4
    VK_FR        ,//=5
    VK_START     ,//=6 HOME
    VK_HOLD     ,//=7
    VK_SELECT    ,//=8 HELP1
    VK_HELP2    ,//=9
    VK_CLICK    ,//=10
};
#endif

#ifdef _WIZ
/* WIZ button mapping */
enum MAP_KEY
{
   VK_UP         , // 0
   VK_UP_LEFT    , // 1
   VK_LEFT       , // 2
   VK_DOWN_LEFT  , // 3
   VK_DOWN       , // 4
   VK_DOWN_RIGHT , // 5
   VK_RIGHT      , // 6
   VK_UP_RIGHT   , // 7
   VK_SELECT     , // 8
   VK_START      , // 9
   VK_FL         , // 10
   VK_FR         , // 11
   VK_FA         , // 12
   VK_FB         , // 13
   VK_FX         , // 14
   VK_FY         , // 15
   VK_VOL_UP     , // 16
   VK_VOL_DOWN   , // 17
   VK_CLICK     // 18
};
#endif

Ну и обработка - вроде этого стандартного куска кода:
Код:
      SDL_Event event;

      /* Check for events */
      while (SDL_PollEvent (&event))
      {
         switch (event.type)
         {
            case SDL_KEYDOWN:
               /* if press Ctrl + C, terminate program */
               if ( (event.key.keysym.sym == SDLK_c) && (event.key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) )
                  done = 1;
               break;
            case SDL_KEYUP:
               break;
            case SDL_JOYBUTTONDOWN:
               /* if press Start button, terminate program */
               if ( event.jbutton.button == VK_START )
                  done = 1;
               break;
            case SDL_JOYBUTTONUP:
               break;
            case SDL_QUIT:
               done = 1;
               break;
            default:
               break;
         }
      }

_________________
Просто Вовк
Вернуться к началу
Посмотреть профильHahahoj сейчас оффлайн  Отправить личное сообщение
Otto Baynes

Постоялец


Пол: Пол:Мужской
Возраст: 36
Зарегистрирован: 19.01.2012
Сообщения: 42

Группы: Нет

СообщениеДобавлено: Сб Янв 28, 2012 3:32 pm    Заголовок сообщения: Ответить с цитатой

Спасибо, я примерно так и делаю.
С осями есть такая проблема: когда джойстик выжат "до упора" в какую нибудь сторону, насколько я понял должно выдавать значение близкое к 32767, но реально похоже выдается намного меньшее. То есть пишу так:
Код:
if(event.jaxis.value > 16000) {
   смещаем координату спрайта


жму вправо не до упора - спрайт движется, если нажать до упора - останавливается. Может есть готовая программа выдающая значения наклона оси?

И еще у меня пока не получается сделать прыжок глав.героя в беге, он тупо останавливается и прыгает вертикально вверх, а в оригинале он прыгает вперед.
Мой код бега-прыжка:
Код:
   xVel=0;

   //Check if a key has been released.
   if(event.type==SDL_JOYBUTTONUP){
      //It has so downKeyPressed can't be true.
      downKeyPressed=false;
   }

   switch(event.type){
   case SDL_JOYAXISMOTION:
      if ( ( event.jaxis.value < -16000 ) || (event.jaxis.value > 16000 ) )
      {
         if( event.jaxis.axis == 0)
         {
            /* Left-right movement code goes here */
            if(event.jaxis.value < 0)
               xVel-=4;
            else
               xVel+=4;
         }

         if( event.jaxis.axis == 1)
         {
            /* Up-Down movement code goes here */
         if(event.jaxis.value < -16000 && inAir==false){
               isJump=true;
            }
         }
      }
      break;
   case SDL_JOYBUTTONDOWN:
      //Switch which key is pressed.
      switch(event.jbutton.button){
         case CAANOO_BUTTON_B:
            //The up key, if we aren't in the air we start jumping.
            if(inAir==false){
               isJump=true;
            }
            break;


Оригинал:
Код:
   //Get the current keystate.
   Uint8* keyState=SDL_GetKeyState(NULL);
   
   //Reset horizontal velocity.
   xVel=0;
   if(keyState[SDLK_RIGHT]){
      //Walking to the right.
      xVel+=4;
   }
   if(keyState[SDLK_LEFT]){
      //Walking to the left.
      xVel-=4;
   }
   
   //Check if a key has been released.
   if(event.type==SDL_KEYUP){
      //It has so downKeyPressed can't be true.
      downKeyPressed=false;
   }

   //Check if a key is pressed (down).
   if(event.type==SDL_KEYDOWN){
      //Switch which key is pressed.
      switch(event.key.keysym.sym){
         case SDLK_UP:
            //The up key, if we aren't in the air we start jumping.
            if(inAir==false){
               isJump=true;
            }
            break;

_________________
Мой блог
Мой эмулятор CHIP-8 и Super CHIP
Вернуться к началу
Посмотреть профильOtto Baynes сейчас оффлайн  Отправить личное сообщение Посетить сайт автора
Hahahoj

Site Admin


Пол: Пол:Мужской
Возраст: 50
Зарегистрирован: 08.10.2008
Сообщения: 1848

Группы: 
[ Команда сайта ]
[Модераторы Модераторы ]


СообщениеДобавлено: Пн Янв 30, 2012 6:29 pm    Заголовок сообщения: Ответить с цитатой

Ну, судя по приведенному коду у тебя за один игровой цикл обрабатывается либо джойстик, либо кнопки. Поэтому одновременно и не работают.

Приведу пример из того же йети - вот его полный игровой цикл в отношении к вводу/выводу:

Код:
SDL_Joystick* caanooController;

...

while(done==0){
      keys = SDL_GetKeyState(NULL);
      if ( SDL_PollEvent(&event) ) {
         switch (event.type) {
         case SDL_JOYAXISMOTION:
            switch(event.jaxis.axis) {
            case 0:
               if(event.jaxis.value<-16000) {
                  yeti.keyboard.left = 1;
                  yeti.keyboard.right = 0;
               } else if(event.jaxis.value>16000) {
                  yeti.keyboard.left = 0;
                  yeti.keyboard.right = 1;
               } else {
                  yeti.keyboard.left = 0;
                  yeti.keyboard.right = 0;
               }
               break;
            case 1:
                                       if(event.jaxis.value<-16000) {
                                                yeti.keyboard.up = 1;
                                                yeti.keyboard.down = 0;
                                        } else if(event.jaxis.value>16000) {
                                                yeti.keyboard.up = 0;
                                                yeti.keyboard.down = 1;
                                        } else {
                                                yeti.keyboard.up = 0;
                                                yeti.keyboard.down = 0;
                                        }
               break;
            }
            break;
         }

            }
        #ifdef GP2XWIZ
      yeti.keyboard.up     = SDL_JoystickGetButton(caanooController,KEY_UP);//WIZ_UP;//keys[SDLK_UP];
      yeti.keyboard.down   = SDL_JoystickGetButton(caanooController,KEY_DOWN);//WIZ_DOWN;//keys[SDLK_DOWN];
      yeti.keyboard.left   = SDL_JoystickGetButton(caanooController,KEY_LEFT);//WIZ_LEFT;//keys[SDLK_LEFT];
      yeti.keyboard.right  = SDL_JoystickGetButton(caanooController,KEY_RIGHT);//WIZ_RIGHT;//keys[SDLK_RIGHT];
      #endif
      #ifdef GP2X
      yeti.keyboard.a      = SDL_JoystickGetButton(caanooController,KEY_B);//WIZ_B;//keys[SDLK_RETURN];
      yeti.keyboard.b      = SDL_JoystickGetButton(caanooController,KEY_X);//WIZ_X;//keys[SDLK_SPACE];
      yeti.keyboard.l      = SDL_JoystickGetButton(caanooController,KEY_L);//WIZ_R;//keys[SDLK_a];
      yeti.keyboard.r      = SDL_JoystickGetButton(caanooController,KEY_R);//WIZ_L;//keys[SDLK_y];
      yeti.keyboard.select = SDL_JoystickGetButton(caanooController,KEY_SELECT);//WIZ_SELECT;//keys[SDLK_ESCAPE];
      done = SDL_JoystickGetButton(caanooController,KEY_START);
      #endif
        #ifdef _PC
      yeti.keyboard.up     = keys[SDLK_UP];
      yeti.keyboard.down   = keys[SDLK_DOWN];
      yeti.keyboard.left   = keys[SDLK_LEFT];
      yeti.keyboard.right  = keys[SDLK_RIGHT];
      yeti.keyboard.a      = keys[SDLK_RETURN];
      yeti.keyboard.b      = keys[SDLK_SPACE];
      yeti.keyboard.l      = keys[SDLK_a];
      yeti.keyboard.r      = keys[SDLK_y];
      yeti.keyboard.select = keys[SDLK_ESCAPE];
      done = keys[SDLK_e];
      #endif
   }

   //cierre ordenado
   SDL_JoystickClose(caanooController);


Потом при необходимости проверить нажатия анализируются уже виртуальные кнопки yeti.keyboard.кнопка и их комбинации.

_________________
Просто Вовк
Вернуться к началу
Посмотреть профильHahahoj сейчас оффлайн  Отправить личное сообщение
Hahahoj

Site Admin


Пол: Пол:Мужской
Возраст: 50
Зарегистрирован: 08.10.2008
Сообщения: 1848

Группы: 
[ Команда сайта ]
[Модераторы Модераторы ]


СообщениеДобавлено: Ср Фев 01, 2012 1:53 pm    Заголовок сообщения: Ответить с цитатой

Otto Baynes ну как, получилось?
_________________
Просто Вовк
Вернуться к началу
Посмотреть профильHahahoj сейчас оффлайн  Отправить личное сообщение
Otto Baynes

Постоялец


Пол: Пол:Мужской
Возраст: 36
Зарегистрирован: 19.01.2012
Сообщения: 42

Группы: Нет

СообщениеДобавлено: Ср Фев 01, 2012 7:31 pm    Заголовок сообщения: Ответить с цитатой

Пока нет. Что-то я совсем управление поломал))
То совсем кнопки не работают, то самопроизвольно срабатывают.

_________________
Мой блог
Мой эмулятор CHIP-8 и Super CHIP
Вернуться к началу
Посмотреть профильOtto Baynes сейчас оффлайн  Отправить личное сообщение Посетить сайт автора
Hahahoj

Site Admin


Пол: Пол:Мужской
Возраст: 50
Зарегистрирован: 08.10.2008
Сообщения: 1848

Группы: 
[ Команда сайта ]
[Модераторы Модераторы ]


СообщениеДобавлено: Ср Фев 08, 2012 12:57 pm    Заголовок сообщения: Ответить с цитатой

12345
_________________
Просто Вовк
Вернуться к началу
Посмотреть профильHahahoj сейчас оффлайн  Отправить личное сообщение
Otto Baynes

Постоялец


Пол: Пол:Мужской
Возраст: 36
Зарегистрирован: 19.01.2012
Сообщения: 42

Группы: Нет

СообщениеДобавлено: Ср Фев 08, 2012 1:06 pm    Заголовок сообщения: Ответить с цитатой

Сделал почти как в Yeti, все равно у меня не совсем адекватно на джойстик реагирует, иногда глав.герой останавливается при отжатии кнопки, иногда нет. Если например нажать резко вправо и сразу отпустить он будет бежать не останавливаясь.

На случай если кому-то интересно как это сейчас выглядит выкложил бинарники для кену (для тех у кого дорогой трафик: осторожно, игра весит 6.5 мегабайт, при том что она еще не рабочая)
http://wiz.rusbase.net/forum/files/otto/meandmyshadow.zip

_________________
Мой блог
Мой эмулятор CHIP-8 и Super CHIP
Вернуться к началу
Посмотреть профильOtto Baynes сейчас оффлайн  Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов GP2X Community -> Портирование для консолей Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы




Powered by phpBB © 2001, 2005 phpBB Group

Locations of visitors to this page