Касательно перекрашенной картинки с прошлой страницы. Всё бы ничего, но с такой картинкой на экране нельзя делать save/reload
Код
I'm sorry, but an uncaught exception occurred.
While running game code: File "renpy/common/00action_file.rpy", line 372, in __call__ renpy.save(fn, extra_info=save_name) TypeError: no default __reduce__ due to non-trivial __cinit__ (perhaps renpy.game.log.log[9].context.scene_lists.layers[u'master'][0].displayable.raw_child.child_surf = <Surface(512x288x32)>)
Я так понимаю, к классу class MyBlit(renpy.Displayable):
Надо доопределить еще какой-то стандартный метод типа __reduce__ ? Или чего-то вроде имени не хватает в __init__ ?
While running game code: File "renpy/common/00action_file.rpy", line 372, in __call__ renpy.save(fn, extra_info=save_name) TypeError: no default __reduce__ due to non-trivial __cinit__ (perhaps store.test_image.child_surf = <Surface(512x288x32)>)
-- Full Traceback ------------------------------------------------------------
Full traceback: File "renpy/common/_layout/screen_load_save.rpym", line 35, in script $ ui.interact() File "D:\Programs\renpy-7.3.5-sdk\renpy\ast.py", line 914, in execute renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store) File "D:\Programs\renpy-7.3.5-sdk\renpy\python.py", line 2028, in py_exec_bytecode exec bytecode in globals, locals File "renpy/common/_layout/screen_load_save.rpym", line 35, in <module> $ ui.interact() File "D:\Programs\renpy-7.3.5-sdk\renpy\ui.py", line 297, in interact rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs) File "D:\Programs\renpy-7.3.5-sdk\renpy\display\core.py", line 2702, in interact repeat, rv = self.interact_core(preloads=preloads, trans_pause=trans_pause, **kwargs) File "D:\Programs\renpy-7.3.5-sdk\renpy\display\core.py", line 3518, in interact_core rv = root_widget.event(ev, x, y, 0) File "D:\Programs\renpy-7.3.5-sdk\renpy\display\layout.py", line 998, in event rv = i.event(ev, x - xo, y - yo, cst) File "D:\Programs\renpy-7.3.5-sdk\renpy\display\transition.py", line 47, in event return self.new_widget.event(ev, x, y, st) # E1101 File "D:\Programs\renpy-7.3.5-sdk\renpy\display\layout.py", line 998, in event rv = i.event(ev, x - xo, y - yo, cst) File "D:\Programs\renpy-7.3.5-sdk\renpy\display\layout.py", line 998, in event rv = i.event(ev, x - xo, y - yo, cst) File "D:\Programs\renpy-7.3.5-sdk\renpy\display\screen.py", line 714, in event rv = self.child.event(ev, x, y, st) File "D:\Programs\renpy-7.3.5-sdk\renpy\display\layout.py", line 998, in event rv = i.event(ev, x - xo, y - yo, cst) File "D:\Programs\renpy-7.3.5-sdk\renpy\display\layout.py", line 244, in event rv = d.event(ev, x - xo, y - yo, st) File "D:\Programs\renpy-7.3.5-sdk\renpy\display\layout.py", line 998, in event rv = i.event(ev, x - xo, y - yo, cst) File "D:\Programs\renpy-7.3.5-sdk\renpy\display\layout.py", line 998, in event rv = i.event(ev, x - xo, y - yo, cst) File "D:\Programs\renpy-7.3.5-sdk\renpy\display\behavior.py", line 962, in event return handle_click(self.clicked) File "D:\Programs\renpy-7.3.5-sdk\renpy\display\behavior.py", line 897, in handle_click rv = run(action) File "D:\Programs\renpy-7.3.5-sdk\renpy\display\behavior.py", line 313, in run new_rv = run(i, *args, **kwargs) File "D:\Programs\renpy-7.3.5-sdk\renpy\display\behavior.py", line 320, in run return action(*args, **kwargs) File "renpy/common/00action_file.rpy", line 372, in __call__ renpy.save(fn, extra_info=save_name) File "D:\Programs\renpy-7.3.5-sdk\renpy\loadsave.py", line 422, in save six.reraise(t, e, tb) File "D:\Programs\renpy-7.3.5-sdk\renpy\loadsave.py", line 405, in save dump((roots, renpy.game.log), logf) File "D:\Programs\renpy-7.3.5-sdk\renpy\loadsave.py", line 49, in dump cPickle.dump(o, f, cPickle.HIGHEST_PROTOCOL) File "stringsource", line 2, in pygame_sdl2.surface.Surface.__reduce_cython__ TypeError: no default __reduce__ due to non-trivial __cinit__ (perhaps store.test_image.child_surf = <Surface(512x288x32)>)
surf.lock() for i in range(int(self.width)): for j in range(int(self.height)): pix = surf.get_at((i, j)) for cf, ct in self.colors: if pix == cf: surf.set_at((i, j), ct) surf.unlock() pix = None render = renpy.Render(self.width, self.height) render.blit(surf, (0, 0))
return render
Теперь отображает, красит, сохраняет и загружает (пока что) без ошибок
А можно ли создать билд игры, чтоб без вот этого всего в папках lib и renpy? Игра 10 файлов и библиотека на 1000. Как-то неприятно. Собрать в renpy.zip пробовал, что-то не вышло... Как это правильно делается?
Как красиво и грамотно пропустить первое меню, возникающее на старте, и сразу прыгнуть в игру? Видел совет вписать
Код
label main_menu: $ Start ()
Это срабатывает, но 1. почему-то ломает отображение оверлея quick_menu (можно конечно поразбираться и с этим) и роллбэк 2. отключает основное меню совсем, но из игры-то бы его таки неплохо уметь вызывать
Хотелось бы узнать, что тут не так. Казалось бы, прямо в мануале написано
Код
scene bg beach
is equivalent to:
$ renpy.scene() $ renpy.show("bg beach")
Однако, если добавить к экрану say например кнопки, то
команда scene при переходах отрабатывает нормально, а программные эквиваленты этого не делают. Выполняется переход и все кнопки экрана видно поверх картинок
обычный код экрана
Код
screen say(who, what): style_prefix "say" window: id "window" if who is not None: window: id "namebox" style "namebox" text who id "who" text what id "what"
imagebutton auto "btn_%s" action ShowMenu("")
Код
"test"
scene "image" # здесь кнопки скрываются with dissolve
"test?"
$ renpy.scene () $ renpy.show ("image") # здесь почему-то нет $ renpy.with_statement (dissolve)
Именно поэтому я и написал что зависит от того как устроена ваша новелла. Такой подход не предусматривает гибкости. Рассмотрите функциональный подход. Функция будет делать каждый раз то что надо, а в скрипте одна строка. По-моему, штатно эффекты на show не навешиваются.
Столкнулся с очередной непонятной фигнёй. Можно как-то отключить любое взаимодействие на время выполнения перехода? Например делаешь свой титульный экран, выполняешь с него открытия/закрытия других экранов В результате, пока что-то красиво открывается, если во время этого перехода жать правую кнопку мыши, проваливаешься в первое доступное меню Обычно экран сохранений, где можно сохраниться, получается, прямо на титульнике... -_-