[SOLVED] Error when displaying Live2D on a screen: NoneType object is not iterable

Discuss how to use the Ren'Py engine to create visual novels and story-based games. New releases are announced in this section.
Forum rules
This is the right place for Ren'Py help. Please ask one question per thread, use a descriptive subject like 'NotFound error in option.rpy' , and include all the relevant information - especially any relevant code and traceback messages. Use the code tag to format scripts.
Post Reply
Message
Author
User avatar
chocojax
Miko-Class Veteran
Posts: 705
Joined: Sun Oct 25, 2009 11:27 am
Projects: Umbra, Familiarity, Maleficent Justice
Tumblr: chocojax
Location: California
Contact:

[SOLVED] Error when displaying Live2D on a screen: NoneType object is not iterable

#1 Post by chocojax »

When I try to display a Live2D model on a screen, I keep getting a NoneType error. It displays fine in the actual script when I test it out.

The way I'm trying to implement it:

Code: Select all

screen about():

    tag menu
    ## This use statement includes the game_menu screen inside this one. The
    ## vbox child is then included inside the viewport inside the game_menu
    ## screen.
    use game_menu(_("About"), scroll="viewport"):

        image Live2D("live2d/Chocojaxv2Default")
Error:

Code: Select all

I'm sorry, but an uncaught exception occurred.

While running game code:
TypeError: 'NoneType' object is not iterable

-- Full Traceback ------------------------------------------------------------

Full traceback:
  File "renpy/common/_layout/screen_main_menu.rpym", line 28, in script
    python hide:
  File "E:\renpy-8.0.3-sdk\renpy\ast.py", line 1138, in execute
    renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store)
  File "E:\renpy-8.0.3-sdk\renpy\python.py", line 1122, in py_exec_bytecode
    exec(bytecode, globals, locals)
  File "renpy/common/_layout/screen_main_menu.rpym", line 28, in <module>
    python hide:
  File "renpy/common/_layout/screen_main_menu.rpym", line 35, in _execute_python_hide
    ui.interact()
  File "E:\renpy-8.0.3-sdk\renpy\ui.py", line 299, in interact
    rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
  File "E:\renpy-8.0.3-sdk\renpy\display\core.py", line 3579, in interact
    repeat, rv = self.interact_core(preloads=preloads, trans_pause=trans_pause, pause=pause, pause_start=pause_start, pause_modal=pause_modal, **kwargs) # type: ignore
  File "E:\renpy-8.0.3-sdk\renpy\display\core.py", line 4172, in interact_core
    self.draw_screen(root_widget, fullscreen_video, (not fullscreen_video) or video_frame_drawn)
  File "E:\renpy-8.0.3-sdk\renpy\display\core.py", line 2779, in draw_screen
    surftree = renpy.display.render.render_screen(
  File "render.pyx", line 492, in renpy.display.render.render_screen
  File "render.pyx", line 266, in renpy.display.render.render
  File "E:\renpy-8.0.3-sdk\renpy\display\layout.py", line 886, in render
    surf = render(child, width, height, cst, cat)
  File "render.pyx", line 170, in renpy.display.render.render
  File "render.pyx", line 266, in renpy.display.render.render
  File "E:\renpy-8.0.3-sdk\renpy\display\layout.py", line 886, in render
    surf = render(child, width, height, cst, cat)
  File "render.pyx", line 170, in renpy.display.render.render
  File "render.pyx", line 266, in renpy.display.render.render
  File "E:\renpy-8.0.3-sdk\renpy\display\layout.py", line 886, in render
    surf = render(child, width, height, cst, cat)
  File "render.pyx", line 170, in renpy.display.render.render
  File "render.pyx", line 266, in renpy.display.render.render
  File "E:\renpy-8.0.3-sdk\renpy\display\screen.py", line 731, in render
    child = renpy.display.render.render(self.child, w, h, st, at)
  File "render.pyx", line 170, in renpy.display.render.render
  File "render.pyx", line 266, in renpy.display.render.render
  File "E:\renpy-8.0.3-sdk\renpy\display\layout.py", line 886, in render
    surf = render(child, width, height, cst, cat)
  File "render.pyx", line 170, in renpy.display.render.render
  File "render.pyx", line 266, in renpy.display.render.render
  File "E:\renpy-8.0.3-sdk\renpy\display\layout.py", line 1336, in render
    surf = render(child,
  File "render.pyx", line 170, in renpy.display.render.render
  File "render.pyx", line 266, in renpy.display.render.render
  File "E:\renpy-8.0.3-sdk\renpy\display\layout.py", line 1849, in render
    cwidth, cheight = sizeit('c', width, height, 0, 0)
  File "E:\renpy-8.0.3-sdk\renpy\display\layout.py", line 1846, in sizeit
    rend = renpy.display.render.render_for_size(pos_d[pos], width, height, st, at)
  File "render.pyx", line 318, in renpy.display.render.render_for_size
  File "render.pyx", line 266, in renpy.display.render.render
  File "E:\renpy-8.0.3-sdk\renpy\display\viewport.py", line 273, in render
    surf = renpy.display.render.render(self.child, child_width, child_height, st, at)
  File "render.pyx", line 170, in renpy.display.render.render
  File "render.pyx", line 266, in renpy.display.render.render
  File "E:\renpy-8.0.3-sdk\renpy\display\layout.py", line 1107, in render
    surf = render(d, width - x, rh, cst, cat)
  File "render.pyx", line 170, in renpy.display.render.render
  File "render.pyx", line 266, in renpy.display.render.render
  File "E:\renpy-8.0.3-sdk\renpy\gl2\live2d.py", line 922, in render
    expression_redraw = self.update_expressions(st)
  File "E:\renpy-8.0.3-sdk\renpy\gl2\live2d.py", line 832, in update_expressions
    expressions = list(self.used_nonexclusive) # type: ignore
TypeError: 'NoneType' object is not iterable

Windows-10-10.0.19044 AMD64
Ren'Py 8.1.1.23060707
Thanks!
Last edited by chocojax on Mon Jul 31, 2023 1:06 am, edited 1 time in total.

User avatar
m_from_space
Miko-Class Veteran
Posts: 975
Joined: Sun Feb 21, 2021 3:36 am
Contact:

Re: Error when displaying Live2D on a screen: NoneType object is not iterable

#2 Post by m_from_space »

Adding a Displayable to a screen is not done using the keyword "image", you have to use "add".

Code: Select all

add Live2D("live2d/Chocojaxv2Default")

User avatar
chocojax
Miko-Class Veteran
Posts: 705
Joined: Sun Oct 25, 2009 11:27 am
Projects: Umbra, Familiarity, Maleficent Justice
Tumblr: chocojax
Location: California
Contact:

Re: Error when displaying Live2D on a screen: NoneType object is not iterable

#3 Post by chocojax »

m_from_space wrote: Sat Jul 29, 2023 5:51 am Adding a Displayable to a screen is not done using the keyword "image", you have to use "add".

Code: Select all

add Live2D("live2d/Chocojaxv2Default")
I've tried that too, still the same error with NoneType object is not iterable.

laure44
Regular
Posts: 84
Joined: Mon Mar 08, 2021 10:55 pm
Projects: Arkan'sTower, Gemshine Lorelei!
Location: France
Contact:

Re: Error when displaying Live2D on a screen: NoneType object is not iterable

#4 Post by laure44 »

chocojax wrote: Sun Jul 30, 2023 3:09 pm
m_from_space wrote: Sat Jul 29, 2023 5:51 am Adding a Displayable to a screen is not done using the keyword "image", you have to use "add".

Code: Select all

add Live2D("live2d/Chocojaxv2Default")
I've tried that too, still the same error with NoneType object is not iterable.
You will need to define your Live2D displayable first, outside of the screen.

Code: Select all

image test = Live2D("images/test.model3.json")

screen MyScreen():
    add "test"

User avatar
chocojax
Miko-Class Veteran
Posts: 705
Joined: Sun Oct 25, 2009 11:27 am
Projects: Umbra, Familiarity, Maleficent Justice
Tumblr: chocojax
Location: California
Contact:

Re: Error when displaying Live2D on a screen: NoneType object is not iterable

#5 Post by chocojax »

laure44 wrote: Sun Jul 30, 2023 4:37 pm
chocojax wrote: Sun Jul 30, 2023 3:09 pm
m_from_space wrote: Sat Jul 29, 2023 5:51 am Adding a Displayable to a screen is not done using the keyword "image", you have to use "add".

Code: Select all

add Live2D("live2d/Chocojaxv2Default")
I've tried that too, still the same error with NoneType object is not iterable.
You will need to define your Live2D displayable first, outside of the screen.

Code: Select all

image test = Live2D("images/test.model3.json")

screen MyScreen():
    add "test"
This worked, thank you so much!!

Post Reply

Who is online

Users browsing this forum: Ahrefs [Bot], Google [Bot]