| Разработка и ромхакинг > Ромхакинг и программирование |
| SGDK |
| << < (18/40) > >> |
| Томахомэ:
--- Цитата: worm от 04 Апрель 2017, 20:36:38 ---А об этой ошибке я писал выше) --- Конец цитаты --- После создания в Code:Blocks исходника уже изначально как C++ source-файл, объявление о couldn't allocate heap в объявлении куда-то исчезло, однако всё равно всякий раз получается ошибка (см. скриншот). |
| worm:
Томахомэ, перекомпилируй с чистого листа, поудаляй все outputы, т.к. мог остаться след от couldn't allocate heap, что и приводит к данной ошибке. |
| Томахомэ:
Хмммм.... а синтаксис у SGDK`шных версий C и C++ точно ничем не отличается? А то ведь я в C++-source-файле текст из примера я оставил абсолютно неизменным: --- Код: --- #include <genesis.h> int main() { VDP_drawText("Hello Genny World!", 10, 13); while(1) { //read input //move sprite //update score //draw current screen (logo, start screen, settings, game, gameover, credits...) //wait for screen refresh VDP_waitVSync(); } return (0); } --- Конец кода --- |
| Томахомэ:
Нашёл-таки, в чём дело - там, по ходу, тупо не поддерживается файловое расширение .cpp. А поддерживаются такие: Источник. |
| ALKOSHA:
Ну конечно. Там ведь чистая сишка, никаких плюсов, никакого ООП. Добавлено позже: А вот с затиранием спрайтов так и не понял чё происходит. Вечером скину гифку. |
| Томахомэ:
--- Цитата: ALKOSHA от 14 Апрель 2017, 08:41:51 ---Ну конечно. Там ведь чистая сишка, никаких плюсов, никакого ООП. --- Конец цитаты --- А откуда тогда такая надпись? |
| ALKOSHA:
От автора, оформившего данный пост на сайте GCUP, который явно не вникал даже в настройку компилятора, а лишь наспех опубликовал новость. |
| ALKOSHA:
Не знаю чё произошло. o_0 Но затираться перестало. Правда я уже с тех пор модифицировал некоторые ф-ции |
| ALKOSHA:
Ага. Значит вот в чём странность. Если инициализировать спрайты с начальными координатами за пределами экрана, то они получаются "надгрызенные". Если же эти спрайты сперва поместить на экранной области, а лишь потом плавно сместить за экран, то ничего не затрётся. Хммм... <_< Добавлено позже: Вот тело главного цикла, тут идёт привязка к таймеру. Чтоб при разной нагруженности проца координаты всего вокруг обновлялись равномерно. --- Код: --- while(TRUE) { // handleInput(); u32 current = getTimer(0, FALSE); u32 elapsed = current - previous; previous = current; lag += elapsed; while (lag >= 2000) { update_game(); lag -= 2000; } SPR_update(sprites, 80); VDP_waitVSync(); } --- Конец кода --- Не знаю, может это как-то влияет. |
| Томахомэ:
--- Цитата --- Только учти, если у тебя vista или более поздняя виндуза, то с 50% вероятностью, ты словишь ошибку "couldn't allocate heap". --- Конец цитаты --- Что ж, в принципе, по моему опыту, .c-файлы даже на моей x64-десятке каждый раз компилятся удачно, так что зря беспокоиться не надо. А вот где сложности и непонятки с компиляцией точно есть, так это в Neo-Geo`вском SDK от Neobitz\Sebastian Mihai. Там при активации bat`ников через командную строку (даже после того, как все пути в них расставлены правильно) выдаются вот какие ошибки: см. скриншот. В архиве - сам полный SDK, чтобы вы могли разобраться и узнать, чё там к чему. Понятно, что оффтоп, но создавать под это аж отдельную тему мне не хотелось. |
| worm:
Томахомэ, т.е. в SGDK у тебя не вылетает couldn't allocte heap, а в NeoDev вылетает? Весьма странно ведет себя твоя ОС, у меня была 10ка, тоже х64, эта дрянь вылетала в 8 из 10 случаев. Тем временем, вышла новая версия SGDK. Обещают лучшую генерацию кода с теперешним GCC 6.3, поддержка LTO, обновленный rescomp и много всяких вкусностей. Changelog 1.30 (June 2017) COMPILER Updated to GCC 6.3 (thanks a tons to Gligli for that !) many bugs fix and new features compared to old GCC 3.4.6 much better assembly code generation :) added LTO (Linker Time Optimization) support Modified makefile to enable LTO and improve optimization level. Rescomp: updated to handle structure changes in the Sprite Engine. LIBRARY DMA: minor optimization to DMA_queue(..) method (thanks to HpMan) Memory: default stack size increased to 0x800 bytes (GCC 6.3 requires more stack memory :p) Sprite Engine: added automatic Y sorting (per sprite) added SPR_sort(..) for generic sorting added SPR_sortOnY(..) for generic sorting by default now sprite visibility is set to always ON (faster than automatic visibility) updated 'Collision' structure (hierarchical structure) some changes to internal structures to provide better performance VDP BG/Tile: fixed a minor bug in VDP_setTileMapDataEx(..) and VDP_setTileMapDataRectEx(..) methods (thanks to Alekmaul for reporting it) Minors fixes... SAMPLE Bench: fixed math tests for GCC 6.3 https://github.com/Stephane-D/SGDK/wiki/Download |
| ALKOSHA:
Надеюсь устранены непредвиденные баги, по причине которых я не довёл до ума дермосцену и Кровавыша. |
| Segaman:
кто подскажет, как в SGDK спрайты рисовать? у мну есть графоний в сеговом формате и в формате bmp. кого мне надо зарезать, чтобы на экране появился спрайт? :) Добавлено позже: --- Код: ---void main() { SYS_disableInts(); { VDPPlan planA, planB; planA.value = CONST_PLAN_A; planB.value = CONST_PLAN_B; // очистить экран VDP_setHorizontalScroll( planA, 0 ); VDP_setVerticalScroll( planA, 0 ); VDP_clearPlan( planA, TRUE ); VDP_clearPlan( planB, TRUE ); SPR_init(16,256,256); SPR_addSprite( &SPR_BALL, 16, 16, TILE_ATTR(PAL0, TRUE, FALSE, FALSE) ); SYS_enableInts(); // включить экран VDP_setEnable( TRUE ); SPR_update(); } while(TRUE); } --- Конец кода --- вот так рисую а экран черный. список спрайтов глянул - пусто, графоний тоже пусто :-\ |
| ALKOSHA:
В коде всё в норме, кажется. Может с ресами чёт не то? :neznayu: Я обычно через irfanView понижаю палитру до 16bpp. Ещё попробуй не выключать прерывания на момент инициализации. У меня с этим гемор был на реальной железке, кстати. Но то в старой версии SGDK. Добавлено позже: Не забываем так же, что размер спрайтов в ресурсах должен быть кратный 8-ми по ширине\высоте. |
| ALKOSHA:
Я тут это самое.... короче... в общем... ну, это... решил смести паутину и сдуть пыль со своего недобитого проекта. Качнул самую последнюю СДК (1.34), датируемую январём сего года. До того клепал на версии 1.12. Там множество багов и тормозов было, но самый главный баг - невозможность очистить VRAM. Нынешние же бенчмарки и демосцена заставляют захлебнуться слюной от искушения. Но вот терь куча вопросов возникает по поводу работы новых функций. Начнём с VDP_drawImageEx(VDP_PLAN_B, &alko, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, ind),4, 0, FALSE, TRUE); Чёто непонятное пишыт. Растолкуйте пожалуйста, бо я не программист ни разу. |
| s1nka:
ALKOSHA, Несоответствие типов параметра. Ожидает VDPPlan, а получает u16. |
| ALKOSHA:
С тем уже разобрался. Вместо константы VDP_PLAN_A (VDP_PLAN_B) надо лепить PLAN_A (PLAN_B) Это меньшее из зол. Ща он ругается следующим образом Повылазила тонна следующих сообщений undefined reference to `SPR_initSprite'| undefined reference to `SPR_setAttribut'| undefined reference to `bplan_adr'| Пока что не могу сообразить процесс инициализации спрайтов в новой версии. |
| Sharpnull:
ALKOSHA, Смотрите пример "sgdk\sample\sprite" из нового sgdk и документацию (sgdk\doc). Вместо SPR_initSprite теперь SPR_addSprite: --- Код: ---// init sonic sprite sprites[0] = SPR_addSprite(&sonic_sprite, fix32ToInt(posx - camposx), fix32ToInt(posy - camposy), TILE_ATTR(PAL2, TRUE, FALSE, FALSE)); --- Конец кода --- Вместо SPR_setAttribut теперь несколько функций: --- Код: ---SPR_setPriorityAttribut SPR_setPalette SPR_setVFlip SPR_setHFlip --- Конец кода --- И наконец bplan_adr -> bplan_addr. P.S. Но последнее определено через макрос VDP_PLAN_B, поэтому bplan_addr не нужно использовать напрямую. |
| ALKOSHA:
так-с. Тут процесс кэширования поменялся ещё. Попытаюсь по своим каракулям вспомнить, как делал раньше... Инициализирую карту тайлов static Map *mapj; Объявляю адрес текущей распаковываемой пикчи (в этом особенно неудобно было. Посмотрим как будет в новой версии) ind1 = TILE_USERINDEX; VDP_setMap(VDP_PLAN_A, mapj, TILE_ATTR_FULL(PAL3, FALSE, FALSE, FALSE, ind1), i*2, jy/15); Для следующей распаковываемой пикчи надо было инкрементировать ind1 на количество байт предыдущей пикчи. Неудобно, громоздко, когда набор этих пикч большой. Добавлено позже: Завтра уже посмотрю как там в новой версии. |
| ALKOSHA:
кто знает, как увеличить виртуальный экран до 512-ти пикселей в новой версии? Просто в старой оно так было по-дефолту. А щас картинка на слое прокрутки оказывается не за видимым экраном, а сразу же вылезает с другой стороны. (по вертикали по крайней мере. По горизонтали ещё не проверял) |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |