Page 3 of 5
Re: love.scene (yet another scene graph library)
Posted: Thu Nov 17, 2022 5:26 am
by yetneverdone
Oh another thing, can we have type id for the nodes? so we can have `view:type() == "View"` assertions and whatnot.
Also, what about the fill mode when using this?
Code: Select all
local rect = { {0,0}, {100,0}, {100,100}, {0,100} }
local mesh = love.graphics.newMesh(rect, "fan", "static")
local view = love.scene.newView()
local sprite = view:newSprite(0, 0)
sprite:setGraphic(mesh)
Re: love.scene (yet another scene graph library)
Posted: Thu Nov 17, 2022 9:01 am
by ivan
yetneverdone wrote: ↑Thu Nov 17, 2022 1:13 am
Awesome. Now im convinced to go with it. Just got to think how i will incorporate this with ecs
Ultimately, love.scene is just one way of organizing your drawing code.
You could easily write your own custom scene graph once you understand the underlying principles.
yetneverdone wrote: ↑Thu Nov 17, 2022 1:13 am
Oh another thing, can we have type id for the nodes? so we can have `view:type() == "View"` assertions and whatnot
Ok, great. I have added your suggestion on GitHub and in the documentation.
https://2dengine.com/?p=scene#node:type
https://github.com/2dengine/love.scene
yetneverdone wrote: ↑Thu Nov 17, 2022 1:13 am
Also, what about the fill mode when using this?
You could use sprite:setColor(1, 0, 0) to change the color of the sprite.
Alternatively, you can attach a texture or color information to the mesh.
Re: love.scene (yet another scene graph library)
Posted: Thu Nov 17, 2022 2:46 pm
by yetneverdone
Thanks! After more usage, i still have some questions.
Can the x and y be optional when creating the sprite? Perhaps default it to 0 if nil is passed
What's the difference between transforming the nodes vs using the rest of the parameters in :setGraphic (rotation, scale, offset, shear)? Whats the recommend way of lets say drawing a scaled and rotated sprite to the center of the screen/view?
Re: love.scene (yet another scene graph library)
Posted: Thu Nov 17, 2022 4:26 pm
by ivan
yetneverdone wrote: ↑Thu Nov 17, 2022 2:46 pm
Can the x and y be optional when creating the sprite? Perhaps default it to 0 if nil is passed
Yes, but it leads to bugs in my experience.
If you want to make the position optional you can modify the "node.lua" file:
Code: Select all
function node.new(x, y, mt)
x, y = x or 0, y or 0
local t = { x = x, y = y, r = 0, sx = 1, sy = 1 }
yetneverdone wrote: ↑Thu Nov 17, 2022 2:46 pm
What's the difference between transforming the nodes vs using the rest of the parameters in :setGraphic (rotation, scale, offset, shear)?
setGraphic offsets the graphic relative to the position of the sprite.
This allows you to rotate your image around its center, rather than the top-left corner.
yetneverdone wrote: ↑Thu Nov 17, 2022 2:46 pm
Whats the recommend way of lets say drawing a scaled and rotated sprite to the center of the screen/view?
Sprites located at 0, 0 will be in the center of the screen/view.
Here is how to offset your image to the center of the sprite:
Code: Select all
local iw, ih = img:getDimensions()
local sprite = view:newSprite(0, 0)
sprite:setGraphic(img, -iw/2, -ih/2)
sprite:setRotation(math.pi/2)
I admit, this is not very elegant and similar scene graph libraries have better ways to center your graphic.
I considered adding something like sprite:setGraphic(drawable, "center") but some drawable objects like meshes do not have predefined dimensions.
Thank you for the questions!
Re: love.scene (yet another scene graph library)
Posted: Fri Nov 18, 2022 4:06 am
by yetneverdone
It seems that the sample in the repo's readme is wrong:
Code: Select all
local Scene = require("love_scene.scene")
local view = Scene.newView()
print(1, view:newSprite(e.transform.pos:unpack())) --no error
print(2, Scene.newSprite(view, e.transform.pos:unpack())) --has error
--should be
local node = view:newSprite(e.transform.pos:unpack()) --no error
node:setParent(view)
Re: love.scene (yet another scene graph library)
Posted: Fri Nov 18, 2022 10:11 am
by ivan
You are right, this bug was introduced a while ago. I rarely use the scene.newSprite syntax so I missed it.
Here is the fixed version:
https://github.com/2dengine/love.scene/ ... b0338f3a9e
https://2dengine.com/?p=scene#node
Also, you do not need to call setParent explicitly in this case:
Code: Select all
local node = view:newSprite(0, 0)
-- node:setParent(view) <-- unnecessary
I do not know which version is more useful for you:
or
I am leaning more towards the first version since it avoids one call to the "setParent" function.
Maybe we can support both by making the "parent" argument optional.
Re: love.scene (yet another scene graph library)
Posted: Fri Nov 18, 2022 10:18 am
by yetneverdone
Oh my bad. I meant to use the setParent with the other method Scene.newSprite.
I prefer the passing of parent as parameter.
Im trying drawing a sprite in my project but so far i see nothing. I'll test around more
Re: love.scene (yet another scene graph library)
Posted: Mon Nov 21, 2022 10:21 am
by yetneverdone
This fixed the issue i was having `self.view:setScene(w/2, -h/2)` (the negative height/2). Why though?
Re: love.scene (yet another scene graph library)
Posted: Mon Nov 21, 2022 12:53 pm
by ivan
yetneverdone wrote: ↑Mon Nov 21, 2022 10:21 am
This fixed the issue i was having `self.view:setScene(w/2, -h/2)` (the negative height/2). Why though?
Difficult to say but setScene(w/2, -h/2) is a perfectly valid line.
Please post the rest of your code if you are having further trouble.
Re: love.scene (yet another scene graph library)
Posted: Mon Nov 21, 2022 1:48 pm
by yetneverdone
ivan wrote: ↑Mon Nov 21, 2022 12:53 pm
yetneverdone wrote: ↑Mon Nov 21, 2022 10:21 am
This fixed the issue i was having `self.view:setScene(w/2, -h/2)` (the negative height/2). Why though?
Difficult to say but setScene(w/2, -h/2) is a perfectly valid line.
Please post the rest of your code if you are having further trouble.
What i meant was, i was doing `h/2` first, then making it negative made it works. I guess i cant still visualize mentally that working.
Also, any tips for when to set node's positions/scale vs graphic's position/scale?