I actually developed a rather versatile and very easy to use 2D Game Engine using OpenGL while developing
my game, Stroids. To have a public release it would need some polishing off and some fixes here and there, but check out Stroids to see what it's capable of. Currently I'm about to finish a super fast Tilemapper that gets 50-60FPS for a fullscreen 8-way scrolling tilemapper with size 32x32 tiles (that's 15x10 tiles onscreen for a total of 150+ tiles; more than 150 due to new offset tiles when scrolling).
Things I need to work on are dynamic allocation for objects; right now you have to assign how many objects and textures you're going to create before Image.init() is called, where you throw in the commands to generate everything. Image.init() is called in onSurfaceCreated() and onSurfaceChanged() in the GLSurfaceView. In this you load a texture:
Using java Syntax Highlighting
atlas = new imgData( gl, context, texture, R.drawable.atlas );
Parsed in 0.030 seconds, using
GeSHi 1.0.8.4
Then you load a sprite object:
Using java Syntax Highlighting
tank = new Sprite( atlas, 0.0f, 0.0f, 32.0f, 32.0f, 32.0f, 32.0f );
Parsed in 0.030 seconds, using
GeSHi 1.0.8.4
Parameters are imgData, texX, texY, texWidth, texHeight, spriteWidth, spriteHeight. This allows for multiple images to be stored in the same texture (called an Atlas Texture), so you can use spritesheets or whatever you fancy for maximum efficiency. My engine also supports the use of multiple textures, though this implementation hasn't been polished yet.
Then, when you want to draw that object, you just call Entity.draw(Sprite, X, Y); It also includes overloaded methods with extra parameters for rotation, scale, and RGBA values.
Furthermore if you want to have a series of similar objects, you can implement the Entity class and work from there. That's what I did with Stroids; I made Bullet, Particle, Enemy, and Grid (for the background effect) implement Entity, then use custom drawing and construction methods.
Not only have I coded all of that in, but I have quick and easy sound object control using SoundPool (although there's a lifecycle bug with it that I can't figure out yet), and easy drawing of custom bitmap Text using Text.draw(String, X, Y) with overloaded methods that have scale and RGBA parameters.
And of course, I'm about to finish my tilemapper to add to the engine. I haven't worked in music support yet since Stroids was too intensive to allow the extra processing for music, but I'll add in support later.
I'm iffy about releasing this to the public as of right now, since I'm trying to start a new mobile game company for Android, but I may release soon anyhow. We'll see.