Hi,
as you may noticed, i wrote an wrapper for Codea (App to code on iPad with similar API) called LoveCodify. This way you can run Codea scripts in Love2D (so you can also develop on pc).
Now i stumbled across Corona SDK and Moai. Both support mostly mobile devices and expose a Lua API for the user like Love2D. (i know there are much more similar frameworks out there (luaplayer aso.))
What about writing a lua wrapper script to run Love2D scripts with corona or moai? This way love2D don't has to be ported (and supported) to all different mobile platforms.
What you think about?
cheers
Wrapper instead of porting Love2D
Forum rules
Before you make a thread asking for help, read this.
Before you make a thread asking for help, read this.
- kikito
- Inner party member
- Posts: 3153
- Joined: Sat Oct 03, 2009 5:22 pm
- Location: Madrid, Spain
- Contact:
Re: Wrapper instead of porting Love2D
1. It looks like quite a lot of work
2. Moai is opensource and royalty-free, so that one would be my preference.
2. Moai is opensource and royalty-free, so that one would be my preference.
When I write def I mean function.
Re: Wrapper instead of porting Love2D
I wrote the basics of lovecodify in 2 days and not everything has to be wrapped. Stubs should mostly do it.kikito wrote:1. It looks like quite a lot of work
2. Moai is opensource and royalty-free, so that one would be my preference.
Re: Wrapper instead of porting Love2D
1. Moai for opensource and royalty-free
2. CoronaSDK if need do Closed/commercial projects
Would be nice see LOVE in iOS however.
2. CoronaSDK if need do Closed/commercial projects
Would be nice see LOVE in iOS however.
Re: Wrapper instead of porting Love2D
Here is a first working sample to run Love2D lua scripts with Moai SDK.
But there is one big problem and i don't have a solution yet!
To create an Object you have to create a texture using MOAIGfxQuad2D and afterwards you have use the texture to make an Object calling MOAIProp2D. Then you insert the object into the drawing layer.
In Moai SDK the draw operation is only an update operation. So it only updates the location of an existing object in the drawing layer.
So only one cloud is updated, just because we have only one cloud object.
Bad Idea 1:
Calling MOAIProp2D in the draw method is bad, just because everytime "love.graphics.draw" is called, an additional object is instantiated.
Idea 2
Maybe we have todo a list, to remember and check the instantiated object in the draw operation.
Any other ideas or solutions?
Moai file : "main.lua"
wrapper for love2d : "moai_love2d_wrapper.lua"
love2d sample "Passing Clouds Demo" : "main1.lua" <- take this from the love2d samples
But there is one big problem and i don't have a solution yet!
To create an Object you have to create a texture using MOAIGfxQuad2D and afterwards you have use the texture to make an Object calling MOAIProp2D. Then you insert the object into the drawing layer.
In Moai SDK the draw operation is only an update operation. So it only updates the location of an existing object in the drawing layer.
So only one cloud is updated, just because we have only one cloud object.
Bad Idea 1:
Calling MOAIProp2D in the draw method is bad, just because everytime "love.graphics.draw" is called, an additional object is instantiated.
Idea 2
Maybe we have todo a list, to remember and check the instantiated object in the draw operation.
Any other ideas or solutions?
Moai file : "main.lua"
Code: Select all
print ( "hello, moai here is love!" )
require ("moai_love2d_wrapper")
require ("main1")
SCREEN_UNITS_X = 800
SCREEN_UNITS_Y = 600
SCREEN_WIDTH = SCREEN_UNITS_X
SCREEN_HEIGHT = SCREEN_UNITS_Y
MOAISim.openWindow ( "moai_love2d_wrapper_test", SCREEN_WIDTH, SCREEN_HEIGHT )
viewport = MOAIViewport.new ()
viewport:setScale ( SCREEN_UNITS_X, SCREEN_UNITS_Y )
viewport:setSize ( SCREEN_WIDTH, SCREEN_HEIGHT )
layer = MOAILayer2D.new ()
layer:setViewport ( viewport )
MOAISim.pushRenderPass ( layer )
love.load()
--==============================================================
-- game loop
--==============================================================
mainThread = MOAIThread.new ()
gameOver = false
mainThread:run (
function ()
local frames = 0
while not gameOver do
coroutine.yield ()
frames = frames + 1
-- call Love2D callbacks
love.update( MOAISim.framesToTime (frames) )
love.draw()
-- love.keypressed(k)
end
end
)
Code: Select all
love = {}
love.graphics = {}
function love.graphics.newImage(file)
local tex = MOAITexture.new ()
tex:load ( file )
local xtex, ytex = tex:getSize ()
local gfxQuad = MOAIGfxQuad2D.new ()
gfxQuad:setTexture ( tex )
gfxQuad:setRect ( xtex/2*-1, ytex/2*-1, xtex/2, ytex/2 )
-- return gfxQuad
local prop = MOAIProp2D.new ()
prop:setDeck ( gfxQuad )
prop:setLoc ( -1000, -1000 ) --hack to place the gfx ouside the screen
layer:insertProp ( prop )
return prop
end
function love.graphics.draw( prop, x, y, r, sx, sy, ox, oy )
prop:setLoc ( x-400, y-300 )
prop:forceUpdate ()
end
function love.graphics.setBackgroundColor() end
function love.graphics.setColor() end
function love.graphics.newImageFont() end
function love.graphics.quad() end
function love.graphics.setFont() end
function love.graphics.print() end
love.audio = {}
function love.audio.play() end
function love.audio.newSource() end
love.filesystem = {}
function love.filesystem.load() end
Code: Select all
-------------------------------------------------
-- LOVE: Passing Clouds Demo
-- Website: http://love.sourceforge.net
-- Licence: ZLIB/libpng
-- Copyright (c) 2006-2009 LOVE Development Team
-------------------------------------------------
function love.load()
-- The amazing music.
music = love.audio.newSource("prondisk.xm")
-- The various images used.
body = love.graphics.newImage("body.png")
ear = love.graphics.newImage("ear.png")
face = love.graphics.newImage("face.png")
logo = love.graphics.newImage("love.png")
cloud = love.graphics.newImage("cloud_plain.png")
-- Set the background color to soothing pink.
love.graphics.setBackgroundColor(0xff, 0xf1, 0xf7)
-- Spawn some clouds.
for i=1,5 do
spawn_cloud(math.random(-100, 900), math.random(-100, 700), 80 + math.random(0, 50))
end
love.graphics.setColor(255, 255, 255, 200)
love.audio.play(music, 0)
end
function love.update(dt)
try_spawn_cloud(dt)
nekochan:update(dt)
-- Update clouds.
for k, c in ipairs(clouds) do
c.x = c.x + c.s * dt
end
end
function love.draw()
love.graphics.draw(logo, 400, 380, 0, 1, 1, 128, 64)
for k, c in ipairs(clouds) do
love.graphics.draw(cloud, c.x, c.y)
end
nekochan:render()
end
function love.keypressed(k)
if k == "r" then
love.filesystem.load("main.lua")()
end
end
nekochan = {
x = 400,
y = 250,
a = 0
}
function nekochan:update(dt)
self.a = self.a + 10 * dt
end
function nekochan:render()
love.graphics.draw(body, self.x, self.y, 0, 1, 1, 64, 64)
love.graphics.draw(face, self.x, self.y + math.sin(self.a/5) * 3, 0, 1, 1, 64, 64)
local r = 1 + math.sin(self.a*math.pi/20)
for i = 1,10 do
love.graphics.draw(ear, self.x, self.y, (i * math.pi*2/10) + self.a/10, 1, 1, 16, 64+10*r)
end
end
-- Holds the passing clouds.
clouds = {}
cloud_buffer = 0
cloud_interval = 1
-- Inserts a new cloud.
function try_spawn_cloud(dt)
cloud_buffer = cloud_buffer + dt
if cloud_buffer > cloud_interval then
cloud_buffer = 0
spawn_cloud(-512, math.random(-50, 500), 80 + math.random(0, 50))
end
end
function spawn_cloud(xpos, ypos, speed)
table.insert(clouds, { x = xpos, y = ypos, s = speed } )
end
- bartbes
- Sex machine
- Posts: 4946
- Joined: Fri Aug 29, 2008 10:35 am
- Location: The Netherlands
- Contact:
Re: Wrapper instead of porting Love2D
Perhaps you should create them on draw and cache them, so if in frame 0 there are X draw calls on the same image, X sprites are created, then if there are X draw calls on that image in frame 1, it re-uses those objects, and it should add/remove on demand. Not quite sure about how efficient it would be, but it would work.
You wouldn't even have to remove directly, but wait a few frames and put it outside of the drawing area in the mean time.
You wouldn't even have to remove directly, but wait a few frames and put it outside of the drawing area in the mean time.
Re: Wrapper instead of porting Love2D
Yes thats exactly my Idea 2. I'm fiddling with it, but i cant get it working.
Re: Wrapper instead of porting Love2D
I'm really interested in this wrapper since yesterday that I knew about Moai. If it eventually worked, would it mean that Love2D games could be ported to iOS and Android?
- kikito
- Inner party member
- Posts: 3153
- Joined: Sat Oct 03, 2009 5:22 pm
- Location: Madrid, Spain
- Contact:
Re: Wrapper instead of porting Love2D
Is there a more convenient place to get the source code of this than in the forum post? A github project would be very nice. Other people would be able to send you changes via pull requests.
When I write def I mean function.
Re: Wrapper instead of porting Love2D
If someone helps to find a sollution for the above mention problem, yes, i will do a github and work further on it. If not, i tend to choose a different mobile lua engine.kikito wrote:Is there a more convenient place to get the source code of this than in the forum post? A github project would be very nice. Other people would be able to send you changes via pull requests.
Who is online
Users browsing this forum: Ahrefs [Bot], Google [Bot], Semrush [Bot] and 5 guests