Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Otto Baynes
Постоялец
Пол: Возраст: 37 Зарегистрирован: 19.01.2012 Сообщения: 42
Группы: Нет
|
|
Пробую портировать игру, компилирую так:
Код: | $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 раз |
|
Вернуться к началу |
|
|
Hahahoj
Site Admin
Пол: Возраст: 51 Зарегистрирован: 08.10.2008 Сообщения: 1848
Группы:
|
|
SDLMain это специфическая либа SDL-а под Кену и Виз.
Добавить параметром компиляции вместе с SDL и добавить альтернативный каталог для поиска либ. Относительно корня СДК он лежит в подпапке DGE/lib/target при компиляции для консоли и DGE/lib/host при компиляции для компа. _________________ Просто Вовк |
|
Вернуться к началу |
|
|
Otto Baynes
Постоялец
Пол: Возраст: 37 Зарегистрирован: 19.01.2012 Сообщения: 42
Группы: Нет
|
|
Спасибо.
Как это сделать в cmake я не понял, но получилось скомпилировать игру написав свой makefile
Игра уже запускается на caanoo, теперь надо переделать управление на кнопки и разобраться почему изображение слишком сильно мерцает. _________________ Мой блог
Мой эмулятор CHIP-8 и Super CHIP |
|
Вернуться к началу |
|
|
Otto Baynes
Постоялец
Пол: Возраст: 37 Зарегистрирован: 19.01.2012 Сообщения: 42
Группы: Нет
|
|
Вернуться к началу |
|
|
Hahahoj
Site Admin
Пол: Возраст: 51 Зарегистрирован: 08.10.2008 Сообщения: 1848
Группы:
|
|
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;
}
} |
_________________ Просто Вовк |
|
Вернуться к началу |
|
|
Otto Baynes
Постоялец
Пол: Возраст: 37 Зарегистрирован: 19.01.2012 Сообщения: 42
Группы: Нет
|
|
Спасибо, я примерно так и делаю.
С осями есть такая проблема: когда джойстик выжат "до упора" в какую нибудь сторону, насколько я понял должно выдавать значение близкое к 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 |
|
Вернуться к началу |
|
|
Hahahoj
Site Admin
Пол: Возраст: 51 Зарегистрирован: 08.10.2008 Сообщения: 1848
Группы:
|
|
Ну, судя по приведенному коду у тебя за один игровой цикл обрабатывается либо джойстик, либо кнопки. Поэтому одновременно и не работают.
Приведу пример из того же йети - вот его полный игровой цикл в отношении к вводу/выводу:
Код: | 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
Site Admin
Пол: Возраст: 51 Зарегистрирован: 08.10.2008 Сообщения: 1848
Группы:
|
|
Otto Baynes ну как, получилось? _________________ Просто Вовк |
|
Вернуться к началу |
|
|
Otto Baynes
Постоялец
Пол: Возраст: 37 Зарегистрирован: 19.01.2012 Сообщения: 42
Группы: Нет
|
|
Вернуться к началу |
|
|
Hahahoj
Site Admin
Пол: Возраст: 51 Зарегистрирован: 08.10.2008 Сообщения: 1848
Группы:
|
|
12345 _________________ Просто Вовк |
|
Вернуться к началу |
|
|
Otto Baynes
Постоялец
Пол: Возраст: 37 Зарегистрирован: 19.01.2012 Сообщения: 42
Группы: Нет
|
|
Сделал почти как в Yeti, все равно у меня не совсем адекватно на джойстик реагирует, иногда глав.герой останавливается при отжатии кнопки, иногда нет. Если например нажать резко вправо и сразу отпустить он будет бежать не останавливаясь.
На случай если кому-то интересно как это сейчас выглядит выкложил бинарники для кену (для тех у кого дорогой трафик: осторожно, игра весит 6.5 мегабайт, при том что она еще не рабочая)
http://wiz.rusbase.net/forum/files/otto/meandmyshadow.zip _________________ Мой блог
Мой эмулятор CHIP-8 и Super CHIP |
|
Вернуться к началу |
|
|
|