I'm looking for a 2D graphics engine that would allow me to release to Windows, Mac and the iPhone, much the way Unity does for 3D.
Is there a good engine that does this and is specific to 2D?
There's always the old standby, SDL. It's fairly low level, but that simplicity is what allows it to be ported to bajillions of platforms (including windows, linux, mac, nintendo DS, wii, etc etc). There is an iPhone port, which I haven't used, but seems mature enough.
There really isn't any reason you can't use Unity3D to create "2D" games. You can use textured quads and an orthographic camera, and you have yourself a 2D game. There are even some unique solutions like using a skeletal animation system and putting sprites on top of different joints, or using a really tight perspective camera to get cheap parallaxing.
There are even middleware providers for Unity to provide better sprite management solutions. Like sprite manager 2.
SFML is a nice modern, Object-Oriented, cross platform graphics engine. It is hardware accelerated (based on OpenGL), and has bindings for
SDL, Allegro, OpenGL
SDL and Allegro are not only graphic libs, but whole game development libs.
One down side of SDL is that it takes over your main() and redefines it, making it hard to combine it with other libraries. (QT in my experience)
Another bad thing is that SDL only allows one window (this is stable version 1.2, the development version 1.3 does, but it's not fully supported or documented yet)
I can name SDL's weak points because I know it best and worked with it, but despite that, it's very powerful, many emulators, including a port of Mame and ScummVM, as well as games use it.
OpenGL, despite its popular 3D use, is a graphical library, and as such, also allows 2D graphics through surfaces pixel-level manipulation, and makes extensive use of hardware acceleration both in 3D and 2D.
It runs on Mac (PPC and Intel), Windows and Linux (32 and 64bit) and games are easily distributed as one-file-runs-on-all-platforms ".love" files.
They are basically a zipped version of your game with the zip extension renamed to love.
Unfortunately, there is no iPhone port (so far).
Cocos2D originated under Mac/Windows in Python and is available in an Objective-C flavor under the iPhone. It's popular in 2D iPhone game development. Ray Wenderlich has some great Cocos2D tutorials for the iPhone.
Because they moved from Python to Objective-C, I suspect you're not going to be able to cross-compile between all platforms anymore from the same code base.
If you're not worried about iPhone there's always Flash packaged as AIR - you lose iPhone but you gain Linux and web deployment. You can then choose game/physics/rendering engines that suit your project, eg. FlashPunk, Flixel, Box2d.
You could try the Angel Engine. It's based on C++, OpenGL, Box2D, and it uses Python for scripting. It's mostly for prototyping, but the recent versions seem to focus on making full games.
torque2D supports PC and mac out of the box. The iTorque2D supports deployment to the iphone. Its also possible to get console deployment.
PlayN supports HTML5, Android, iOS, Flash and desktop Java.
Moai can also be published to Google Chrome and Android.
*I don't think publishing is to mac or windows (i.e. to a .app or .exe) is available at the moment but can be added.
Haxe + NME supports HTML5, Flash, Android, iOS, Blackberry, Windows, Mac, Linux, WebOS. It supports 2D graphics (bitmap sprites, vector drawing, plus effects like drop shadow and blur).
I've been hearing a lot about MonoTouch lately for people doing iPhone and iPod touch development. The Framework is on top of Mono, which is already cross platform compatible.
Unity3d is best 2d game development tools and engine. alternatively monogame. html5 and flash is not appropriate for this topic. already flash is dead.