Fantastic post george18!
Congrats on the game coming out too. Man Shaq Fu, wicked stuff. That brings back some serious 90’s nostalgia for me 
Will grab it for sure
Cheers
J [import]uid: 26289 topic_id: 34739 reply_id: 138052[/import]
Fantastic post george18!
Congrats on the game coming out too. Man Shaq Fu, wicked stuff. That brings back some serious 90’s nostalgia for me 
Will grab it for sure
Cheers
J [import]uid: 26289 topic_id: 34739 reply_id: 138052[/import]
Thanks for the tips, george18!
Would you be able to provide some advice / code snippets for how you implemented PushWoosh? I’ve followed the tutorial on their website, but can’t seem to get it working. [import]uid: 12217 topic_id: 34739 reply_id: 138063[/import]
@george18, thanks for taking the time to put all of this together. This is priceless not just for the developers, but also for Corona Labs as well.
I am certain we will study your feedback and address the points you’ve highlighted.
This is a true testament to the great community that Corona has.
Good luck on the game and keep up the great work.
-Mohamed [import]uid: 201995 topic_id: 34739 reply_id: 138070[/import]
@george18 - A fantastic set of tips, thanks for putting it all together! Also thanks for mentioning our libs and I’m glad you liked them, I’m hoping to get an update to GGRating up soon for the landscape issue. Hope you managed to get some use out of the rest of them for your next games
[import]uid: 119420 topic_id: 34739 reply_id: 138072[/import]
TNT sounds interesting; I wonder what it offers beyond the Improved Transition Calls lib (especially concerned about how TNT recommends running cleanup every 2 seconds?!)
Never seen the failed parameter passing problem. Wonder what causes that…what build do you guys use to compile with? [import]uid: 41884 topic_id: 34739 reply_id: 138092[/import]
Great list! Thank you for sharing, and good luck with ShaqDown!
Naomi [import]uid: 67217 topic_id: 34739 reply_id: 138105[/import]
@Cell Game Labs
Thanks!
Our code for push notifications has some dependencies that are a bit tricky to replace. For example, we use a custom library to save/retrieve settings from the sqlite database that you’d need to replace with your own code (Or use GGData).
I can send it to you with a description of what you’ll need to change to get it to work if you’d like.
@Glitch Games
Thanks!
The main difference is that TNT uses the built in Corona Transition functions and the Improved-Transitions-Lib modifies the object attributes directly on each frame. This seems to result in slower performance from the benchmarks I’ve done. We actually ended up replacing most of our manually coded transitions (modifying ‘x’ and ‘y’ attributes on enterframe) in GoNinja with TNT in an update and it significantly boosted performance on slower android devices.
I can’t say for 100% certainty that it will work for you though. And in most cases any added performance benefit won’t matter because most apps are either slow for other reasons or run perfectly fine already.
Also TNT manages timers as well and Improved-Transitions library does not. Improved-Transitions does have a lot more easing options which is really nice.
Thaks!
[import]uid: 135827 topic_id: 34739 reply_id: 138153[/import]
Thanks for the feedback George, I’ll definitely take a closer look at that library. The cleaner scares me but maybe the performance is worth it! [import]uid: 41884 topic_id: 34739 reply_id: 138156[/import]
Oh yeah, I forgot to address that. I’m actually not quite sure why the library is coded in such a way as to require that. It uses an array that holds a list of references to transitions that have ended and the clean up timer just clears out the array. Clearing the array is a really fast operation so it’s no big deal to run it on a frequent timer.
I was worried for a while about just how many transitions we could do at the same time and still get good performance on slow devices. Turns out the limit is very high. We probably do 30+ simultaneous transitions at some points. [import]uid: 135827 topic_id: 34739 reply_id: 138159[/import]
george18 -
you wrote that “Also, there’s either a Corona bug or SpriteHelper bug that causes entire spritesheets to not be garbage collected if animated sprites are loaded in a require()'d file and that file is not unrequire()'d.”
Can you tell us more about this? How, exactly, have you “unrequired” the module to get around this? I’m using SpriteHelper and LevelHelper and seem to have a huge memory leak whenever I instantiate objects when loading a LevelHelper level (which, in turn, uses SpriteHelper sprite sheets). [import]uid: 135391 topic_id: 34739 reply_id: 138753[/import]
george18 - also, if you could please explain some of your storyboard workarounds, that would be great. My overall HUGE problem using storyboard is that even if I “remove” scenes manually, the scene “module” still appears to exist in memory. All local variables declared in a scene are still kept in memory, even if most of the display objects are purged. These pile up as system memory leaks. I tried setting “self.view=nil” in my exitScene event but haven’t gotten that to work, either. So frustrating. [import]uid: 135391 topic_id: 34739 reply_id: 138754[/import]
george18: Any code / instructions related to your implementation of PushWoosh would be greatly appreciated! If you don’t want to post the code in this thread you can send them via email: simon at evilgenius dot com dot au
Thanks!
[import]uid: 12217 topic_id: 34739 reply_id: 138797[/import]
Wait, a lot *more* easing options? Does TNT have any? The docs don’t even mention it apart from a line to say it wasn’t implemented?
EDIT: That is to say, Corona gives no error if you set a non-existant transition; I’m trying a few and don’t see a difference between them. And the docs also say easings restart after pause…starting to sound worse and worse unless you’re using it for just character animation [import]uid: 41884 topic_id: 34739 reply_id: 138335[/import]
Awesome post!
Storyboard is definitely a concern of mine as well. It really needs to be cleaned up, optimized, and bugs worked out. It is too critical to be “flaky”.
I use MP3 myself, it is too standard and easy for me not to use it. I am not really all that concerned about legal issues as everyone uses it and the legal issues are just theoretical. If it was a real concern, the entire Internet would been sued many times over by now since pretty much everyone uses it.
Have to agree, the GG libraries are an amazing resource that was more than generous of Graham. [import]uid: 160288 topic_id: 34739 reply_id: 138355[/import]
We use the following unrequire() method:
-- Extracted from SpriteLoq's open source API. Credit to Loqheart
function unrequire(m)
package.loaded[m] = nil
rawset(\_G, m, nil)
-- Search for the shared library handle in the registry and erase it
local registry = debug.getregistry()
local nMatches, mKey, mt = 0, nil, registry['\_LOADLIB']
for key, ud in pairs(registry) do
if type(key) == 'string' and type(ud) == 'userdata' and getmetatable(ud) == mt and string.find(key, "LOADLIB: .\*" .. m) then
nMatches = nMatches + 1
if nMatches \> 1 then
return false, "More than one possible key for module '" .. m .. "'. Can't decide which one to erase."
end
mKey = key
end
end
if mKey then
registry[mKey] = nil
end
return true
end
In exitScene we first remove all event listeners, then walk through all displayObjects we created in that scene and remove them, then set any references to loaded files to nil, then we call unreqiure() on those files.
I’m not sure which of the above steps are required due to the way we coded our game, which ones might be required due to bugs or quirks of storyboard, and which ones should just be done all the time either way. But doing them all seems to work pretty well for making sure everything gets cleaned up.
I’m not sure what to do if you’re having variables leak that are not displayObjects. Normally this doesn’t seem like it would be a big problem even if it was happening (All the local variables we work with are tiny). But maybe your app is different. I suppose you can try putting all of them into a table and then in exitScene make sure all references to the table are nil then set the table to nil.
Sure! Just sent you an email with the code. [import]uid: 135827 topic_id: 34739 reply_id: 138873[/import]
Yeah, easing does work. It supports the same easings as transition.to. We use very easing very sparingly so fortunately the restart-after-pause thing hasn’t been a problem in our case. [import]uid: 135827 topic_id: 34739 reply_id: 138370[/import]
Alright, maybe it just needs an extreme use case to notice. (I’m assuming you mean it’s just a { transition=easing.toQuad } command) Perhaps the best route is to use tnt for character/world animations and the improved transition library for UI. [import]uid: 41884 topic_id: 34739 reply_id: 138381[/import]
Im curious what game mechanics from Go Ninja were used in Shaqdown. Because it feels like the a reskinned game with Shaq instead of a NInja. Was this used to save time? Were you able to build upon your original game mechanics? [import]uid: 75779 topic_id: 34739 reply_id: 138993[/import]
@rmckee282002
Gameplay wise they are a bit similar. Both of them are side scrollers that have generally stationary enemies, both have cutscenes, and so on. This was actually something that OneSpear (our publisher) requested when they first approached us. GoNinja was very successful, so we didn’t see a need to stray too much from the ideas we had when building it.
That said, there’s a huge number of differences too. ShaqDown built from scratch, and has a lot more depth and detail than GoNinja. In ShaqDown there are many more ways to kill each enemies, and there’s a unique boss at the end of each stage with specific weaknesses. Enemies are also spawned in special patterns instead of randomly like in GoNinja. If you play one game after the other you might see just how different the two feel. [import]uid: 135827 topic_id: 34739 reply_id: 139106[/import]
george18 - Thank you for sharing such insight on your team’s development efforts, it’s helpful.
Storyboard has been buggy for myself as well so I’m especially interested in the insight you’ve shared on that. I’ve had to abandon a project I’ve put months of work into because I’m exasperated with unexplained Storyboard bugs.
Corona Labs, can we make Storyboard a priority for getting sorted out? I consider that type of functionality fundamental to nearly any developer’s efforts. [import]uid: 105707 topic_id: 34739 reply_id: 139121[/import]