So I got the Learning Lua book written by the author, which is absolutely wonderful.
Coming from Python, I was having a really easy time, so the next day I downloaded and started doing Love tutorials.
I was messing around with drawing basic shapes but then I ran into a problem, NO CLASSES!?!??
I stopped working with Lua immediately. Can someone tell me how we program in Lua without OOP? My god
Lua seems so freakin cool but I need someone to teach me how I can work with class prototypes. I looked online but there were no good tutorials.
I'll probably get flamed for this, but I think it would be good on the LOVE community if someone could provide a short tutorial on creating a Shape class, and then Inheritance using a Ball class inheriting from Shape.
<3 LOVE thanks
Hit a speedbump as I was learning Love and Lua
-
- Prole
- Posts: 15
- Joined: Thu Nov 25, 2010 9:41 pm
- Robin
- The Omniscient
- Posts: 6506
- Joined: Fri Feb 20, 2009 4:29 pm
- Location: The Netherlands
- Contact:
Re: Hit a speedbump as I was learning Love and Lua
Lua has no class system included, but it gives you the tools to write one. Countless have been written. Even when you only look at the ones written by lovers, we have SECS, MiddleClass, and many more. Pick one, put it in your project, include the library, and you're ready to go.
(Between the two, SECS is simpler, while MiddleClass is more advanced.)
Hope that helps!
(Between the two, SECS is simpler, while MiddleClass is more advanced.)
Hope that helps!
Help us help you: attach a .love.
- nevon
- Commander of the Circuloids
- Posts: 938
- Joined: Thu Feb 14, 2008 8:25 pm
- Location: Stockholm, Sweden
- Contact:
Re: Hit a speedbump as I was learning Love and Lua
And, of course, I want to give a mention to my favorite class system (among other things), HUMP.
-
- Prole
- Posts: 15
- Joined: Thu Nov 25, 2010 9:41 pm
Re: Hit a speedbump as I was learning Love and Lua
Thanks guys. So I need a giant library to use classes?
Does that make Lua/love development really difficult? I hope they aren't so difficult to learn to use because I'd like to continue at the pace ive been learning at.
Also, any projects from the forums you recommend I download and learn source code from? I'd like to make an engine/framework that handles collisions, entity management, etc but I can't without seeing how others were making their games (and making classes)
Does that make Lua/love development really difficult? I hope they aren't so difficult to learn to use because I'd like to continue at the pace ive been learning at.
Also, any projects from the forums you recommend I download and learn source code from? I'd like to make an engine/framework that handles collisions, entity management, etc but I can't without seeing how others were making their games (and making classes)
Re: Hit a speedbump as I was learning Love and Lua
Not to self-advertise, but Döts is a fairly simple LÖVE game that uses classes extensively.
It used MiddleClass for class capabilities.
It used MiddleClass for class capabilities.
- nevon
- Commander of the Circuloids
- Posts: 938
- Joined: Thu Feb 14, 2008 8:25 pm
- Location: Stockholm, Sweden
- Contact:
Re: Hit a speedbump as I was learning Love and Lua
No. But you need to implement classes yourself. If you want to use a huge library to do that, you can. Or you can go with a more barebones approach (the basic version of SECS is like 15 lines).ShadowProtocol wrote:Thanks guys. So I need a giant library to use classes?
No, it's quite simple. While the lack of a built-in class system is one of the things I dislike about Lua, it's not really a big deal since you can implement it yourself rather easily.ShadowProtocol wrote:Does that make Lua/love development really difficult? I hope they aren't so difficult to learn to use because I'd like to continue at the pace ive been learning at.
-
- Prole
- Posts: 15
- Joined: Thu Nov 25, 2010 9:41 pm
Re: Hit a speedbump as I was learning Love and Lua
How...? thats my point lol. I've looked up tutorials on classes in Lua using Google but it was based on large, complicated examples, instead of a simple Shapes class and Square/Circle class..it's not really a big deal since you can implement it yourself rather easily.
- nevon
- Commander of the Circuloids
- Posts: 938
- Joined: Thu Feb 14, 2008 8:25 pm
- Location: Stockholm, Sweden
- Contact:
Re: Hit a speedbump as I was learning Love and Lua
A class system has nothing to do with creating a square class or a circle class. Creating a class system means creating a way to implement classes in general.ShadowProtocol wrote:How...? thats my point lol. I've looked up tutorials on classes in Lua using Google but it was based on large, complicated examples, instead of a simple Shapes class and Square/Circle class..it's not really a big deal since you can implement it yourself rather easily.
If you check the links we've supplied you with, there are plenty of examples of how to create simple classes. Using SECS, you'd do this:
classes.lua:
Code: Select all
--[[
Copyright (c) 2009 Bart Bes
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
]]
__HAS_SECS_COMPATIBLE_CLASSES__ = true
local class_mt = {}
function class_mt:__index(key)
return self.__baseclass[key]
end
class = setmetatable({ __baseclass = {} }, class_mt)
function class:new(...)
local c = {}
c.__baseclass = self
setmetatable(c, getmetatable(self))
if c.init then
c:init(...)
end
return c
end
Code: Select all
require "class" --this assumes you've saved the code above in class.lua
myclass = class:new()
myclass.value = 13
function myclass:setvalue(v)
self.value = v
end
object = myclass:new()
object:setvalue(128)
--myclass.value is still 13 and object.value is now 128
anotherObject = object:new()
--anotherObject.value is 128
-
- Prole
- Posts: 15
- Joined: Thu Nov 25, 2010 9:41 pm
Re: Hit a speedbump as I was learning Love and Lua
You're right, I sounded a bit desperate and I didn't take the time to look at the link first.
So if I save and add that classes.lua to all of my projects, I can implement classes easily just by doing
##defines the class
myclass = class:new()
##sets default value of one of class' member fields
myclass.value = 13
##function definition
function myclass:setvalue(v)
self.value = v
end
##create instance of class
object = myclass:new()
##call function defined above on instance of class
object:setvalue(128)
--myclass.value is still 13 and object.value is now 128
##Can you explain why a newly created object has the value of another instance, and not the default of the class?
anotherObject = object:new()
--anotherObject.value is 128[/code]
If you can be so kind as to tell me what's wrong with each of my comments, that would greatly speed up the learning process
So if I save and add that classes.lua to all of my projects, I can implement classes easily just by doing
##defines the class
myclass = class:new()
##sets default value of one of class' member fields
myclass.value = 13
##function definition
function myclass:setvalue(v)
self.value = v
end
##create instance of class
object = myclass:new()
##call function defined above on instance of class
object:setvalue(128)
--myclass.value is still 13 and object.value is now 128
##Can you explain why a newly created object has the value of another instance, and not the default of the class?
anotherObject = object:new()
--anotherObject.value is 128[/code]
If you can be so kind as to tell me what's wrong with each of my comments, that would greatly speed up the learning process
Re: Hit a speedbump as I was learning Love and Lua
ShadowProtocol wrote: ##function definition
function myclass:setvalue(v)
self.value = v
end
The use of self was deprieciated in one of the more current lua versions, i had to switch from using self to object.value when WOW updated its lua base.
I assume that love is the same .From what I understand typically 'self' gets passed to the function or is declared in your table as a function that refrences the values via __index. KISS; use object.value for all your varables even inside of functions. or choose a class system that includes a self setup
--edit second look
i didn't really look at the class that was being used. IDK why this is not working somone point it out please I would like to know before i start breaking code to include class definintions
-edit third look
my guess and someone call me out if i'm wrong
Code: Select all
myclass = class:new()
myclass.value = 13
function myclass:setvalue(v)
self.value = v
end
Code: Select all
object = myclass:new()
object:setvalue(128)
--myclass.value is still 13 and object.value is now 128
Code: Select all
anotherObject = object:new()
Did i get that right?
Last edited by trookat on Fri Nov 26, 2010 12:42 am, edited 1 time in total.
Who is online
Users browsing this forum: No registered users and 3 guests