Bold Pixel’s Namespaces and Interfaces
After much thought and discussion by myself or at the FGL chat I made some decisions about how to make Bold Pixel more modular in order to simplify my own work. Since we are still on top of contracts, I couldn’t give enough attention to this but my brain was dealing with it in the background.
Inheritance Spaghetti
The problem presented was somewhat simple. My early coding of the blit engine got tangled in the dreadful inheritance headaches. My solution to it was to create one class per major responsibility. It worked fine until the time I decided to expand one of the classes to do something it wasn’t designed to do. So on one hand I solved the inheritance problems but on the other I lost modularity. At this time I had a OOP doubt that I expressed in the FGL forums and the discussion that started there really helped me to move in a different direction, one that I had never considered.
More over I said that I would not support requests that didn’t deal with deal with real problems we had in our own development. And while I stick to that, I couldn’t help but to think: what if Bold Pixel could help someone but it missed one little tiny feature? While this was puzzling me, there was real problem, one with impact in our development that was taunting me…
The case of Blit vs Physics
So Bold Pixel has a blit engine and it will wrap a physics engine (more about the physics engine this later this month) so the question that was on top of the table was: considering there is a blit entity and a physics entity, which one should access the other? Whatever the answer was, modularity was lost in the sense I imagine it. I don’t want blit to know physics and I don’t want physics to know blit!
After a nice chat with Antriel at FGL (thanks mate!) I got to know the Strategy Pattern and all my problems were solved. In simple terms, I will be defining interfaces for all interchangeable objects but the implementations of the interfaces can exist anywhere. In the case presented, a blit entity will have its spatial properties (rotation, x, y and scale) defined by a spatial interface. By default it will be a simple class and it’s needed since the properties of the spatial interface are needed to render bitmapdata. A physics entity will be a implementation of the spatial interface, so if I want to use physics on a blit entity, I simply write: myBlitEntity.position = myPhysicsEntity;
Visibility and Access Issues
This brought another problem. Bold Pixel has always kept its inner “stuff” hidden. The objective was this was to keep the auto-completion short and the use easy preventing mistakes. In order to implement interfaces I would have to make a lot of code public.
The answer to this would be abstract classes, but ActionScript3 does not support it. That will be addressed with simple naming and convention over configuration. Any class in any namespace in Bold Pixel that starts with Abstract will only have the simplest shortest implementation needed for something to work. For instance, if I want a blit entity that draws pixels I will have to extend a AbstractBlitEntity class (I guess that will be the name) but that brings another problem…
So ActionScript does not support abstract classes… convention will say that Abstract defines an abstract class.
Namespaces (to wrap this up!)
To have a better code organization I will need more packages and to have more packages I will need to provide access to classes in different packages. This will be done with namespaces. The only thing that annoys me is that Flash Develop in the current version (3.2.2) does not support code-completion with custom namespaces, but what matters is that using custom namespaces solves two problems. First I can have a bunch of private functionality like I like, but second, any coder can with a simple namespace use extend Bold Pixel to his own needs in a full modular way.
While I reckon that this is all just in my head and that a lot of work will have to be done and even considering that probably this will make Bold Pixel a little bit more complicated to the average coder, I feel it sorts a lot of questions, so: Namespaces and Interfaces FTW!
Posted: September 1st, 2010
at 1:46am by Vlad
Tagged with Bold Pixel Engine, Design Patterns, FlashGameBlogs, Software Engineering
Categories: The code of VGS
Comments: No comments
Bold Pixel Engine Toolkit Video
Hi all,
Just a heads up for a YouTube video we just uploaded that goes through the toolkit package of Bold Pixel Engine.
Remember to watch it in full-screen HD!
Clicky!
Later!
Posted: February 20th, 2010
at 4:10pm by Vlad
Tagged with Bold Pixel Engine, FlashGameBlogs
Categories: The code of VGS
Comments: 1 comment
Brain Melt
I’ve been writing and re-writing a lot of code lately. Somewhere between the work to be done and the work I want to see done, there are dozens of thoughts and discoveries that are worth sharing. Some are puzzling, others are simply brain melting.
Behaviors
A long time goal: behaviors! What is it? How does it work? Well… imagine you write this line of code in a Bold Pixel Engine entity:
1 | entity.behaviors.face.mouse(); |
And from that moment on, the entity will always rotate to the mouse position. That’s a behavior.
Imagine that you could say that instead of facing you’d want it to rotate to the mouse position at a given speed, or with a tween, or that you want it to evade another entity or to find the path to a certain point. Now imagine that behaviors could applied to time… that you could tell your engine time would slow down so you could see all in slow motion…
Well… I wrote two behaviors and it works like a charm!
Flash Player is somewhat smart
I’ve noticed that if you copyPixels() or draw() outside the target bitmapData area, it won’t render anything. Having thousands of objects outside the rectangle area is absolutely meaningless, even if you apply a transformation matrix and draw.
I thought about the possibility of creating a camera object… suddenly this possibility became obviously closer since there will be no need to verify if an object is supposed to be rendered, Flash Player does that for me, I just have to pass the right rectangle… awesome! or at least I’m thinking it will be!
Filters
I really needed a rest a couple of nights ago… so nothing better than writing some new functionalities! My goal was to write filters to apply in layers. After noticing that most flash filters need a BlurFilter applied on top of it, I decided to make it simple and just work with one BlurFilter and one ColorTransform in each layer.
BlurFilter is a huge performance killer, so I played around with only applying the filter to whatever the area the filter needed to be applied to and it works great! The bigger the area, the bigger the performance impact that’s for sure!
ColorTransform seems to have no impact. I’m betting that the pixel color is calculated directly when drawing… if this is true… it’s quite smart!
All in all and since I didn’t want to use any other filters for performance issues, I noticed that with just a little tiny bit of patience, blur and color transform can do most of the cute effects we might need, from shadows to glows to motion blur.
Brain melting the possibilities
A camera with behaviors, like moving to an area with tweening. Flames coming out of a structure and then exploding in thousands of particles flying around with fire trails. Zillions of projectiles flying around in a huge map… wow… this weekend really caused a brain melt.
Need to finish the tutorials to Bold Pixel Engine v1 because v2 is already shaping.
Posted: February 16th, 2010
at 1:00pm by Vlad
Tagged with Bold Pixel Engine, Feedback, FlashGameBlogs, Software Engineering, Technology, Testing
Categories: The code of VGS
Comments: 2 comments
Introduction to BPE’s Blit Engine
Hi everyone!
Just a heads-up to let you know that a video with an introduction to BPE’s Blit Engine is up on our YouTube Channel.
Thanks to everyone that has voiced an opinion about BPE, good, bad, bugs and whatnot, we appreciate it.
Posted: February 9th, 2010
at 8:14pm by Vlad
Tagged with Bold Pixel Engine, FlashGameBlogs
Categories: The code of VGS
Comments: 2 comments
Bold Pixel Engine Released
Hi all!
Great day today! We are releasing Bold Pixel Engine today. Along with this release we are also opening our YouTube channel.
Is that nice or what?
Visit our Bold Pixel Engine Page for information and download and our YouTube channel for the first glimpse of it.
See you later…
Posted: February 7th, 2010
at 7:23pm by Vlad
Tagged with Bold Pixel Engine, FlashGameBlogs
Categories: The code of VGS
Comments: 2 comments
