PixelBlitz Category

  • PixelBlitz: BlitzFont is live :)

    Tonight I created and finished BlitzFont. BlitzFont is a bitmap font handling class. Most Flash games use True Type fonts for their text, or “bitmap True Type fonts”, where the font was specially designed to be used at a small resolution. This is all well and good, but what if you want to design a custom font? Something with some graphical flair that can’t be achieved via True Type. Enter BlitzFont ๐Ÿ™‚

    BlitzFont allows you to use pass in any bitmap from your library, tell it how the font characters are arranged, and then it grabs it all for you. Once grabbed you can ask it for text back again, and it’ll return bitmapData for ever more!

    If this sounds a bit strange, take a look at this font here:

    In this example the characters have between drawn in a grid and they are 32×32 pixels in size. Using them in your game requires just one call:

    [as]
    font.init(new tbjFontBD(0, 0), 32, 32, BlitzFont.SET10 + ” 1234567890,.:’-<>!”, 9, 2, 2, 1, 1);
    [/as]

    All this does is give the name of the bitmap in your Flash library, the width and height of each character, the characters and the order in which they appear (SET10 is a built-in character sequence that you can extend), the 9 value is the number of characters per row, 2 + 2 is the distance (x and y) between each character and finally 1,1 are x/y offsets to start grabbing from.

    Phew sounds quite a lot, but if you’ve got a well arranged font with no spaces, no offset and a standard ASCII ordering, then you only need to use 5 parameters!

    Once you’ve initiated the font that’s it – you can use it. BlitzFont has 3 methods for this:

    getLine()
    getMultiLine()
    getCharacter()

    getLine is ideal if you only need to get back 1 lines worth of text.
    getMultiLine can be given as much text as you want (that will fit onto a bitmap) and supports carriage-returns.
    getCharacter simply returns 1 character.

    Each of the functions above all return bitmapData objects. You have alignment support, so you can left align, right align or center each line perfectly. You can also control the x/y spacing between characters!

    [as]
    var bd:BitmapData = font.getMultiLine(“welcome to thenpixelblitznblitzfont demo”, 1, 16, BlitzFont.ALIGN_CENTER);
    [/as]

    The class does all the dirty work for you, like removing un-supported characters from your input string, making sure it deals with spaces efficiently, and wrapping text on carriage returns.

    But wait, there’s more! You can also create scrolling text messages with 1 line of code ๐Ÿ™‚

    [as]
    defineScroller(width:uint, speed:uint, text:String, autoUpperCase:Boolean = true, wrap:Boolean = true, spacing:uint = 0):BitmapData
    [/as]

    Ok I know, scrollers are old-hat now.. but sometimes in a game you want a little scrolling message, or status update or something, and with this you can easily create it ๐Ÿ™‚ You just define the scroll settings, and then call updateScroller() every loop. You can even set custom events to fire if a certain character scrolls on! and the scroller will fire events on text complete and text wrap too.

    Here’s a demo of this in action (refresh this blog entry if you didn’t get to see it from the start!)

    [swfobj src=”http://sandbox.photonstorm.com/fontDemo.swf” width=”550″ height=”400″]

    Again this is all now in Google code, and i’ll upload example source when I update the examples packages in the coming days. If you are in need of some great bitmap fonts, here’s a good resource.

  • PixelBlitz: BlitzMath is live

    Tonight I pushed up a new build of the BlitzMath utility class. As dull as this may sound it gives you a set of functions to perform math tasks that either AS3 is very slow at, or that simply don’t exist.

    For example there is an extremely fast new rand function for when you only need a small integer back. There are enhancements to the standard Math.random() calls to provide for min, max, int and Float support. There’s a faster abs(), a very fast sqrt replacement and a few other experimental things.

    There’s also a nifty little function I call “chanceRoll” which when give a value between 0 and 100 gives you a boolean back based on that weight. For example say you had a player hit a baddie in a game, you could give him a 30% chance of getting a critical hit by calling chanceRoll(30). I know, it’s simple, but it’s lots of simple little things that will make this framework great ๐Ÿ™‚

    There’s also a blindingly fast simultaneous sine/cosine table generator. So fast in-fact you can generate the tables in real-time! The length, sin/cos amplitude and frequency are all under your control.

    This is all now in Google Code, and here’s a quick demo to play with:

    [swfobj src=”http://sandbox.photonstorm.com/mathDemos.swf” width=”550″ height=”400″]

  • PixelBlitz: New package, new domain

    Yesterday I completed the move to re-package PixelBlitz. Norm agreed, and we registered a new domain (pixelblitz.org) and I went through and updated the library to use the new package location.

    I think it makes it cleaner and easier to type ๐Ÿ™‚

    The domain name will be used to point to a PixelBlitz web site, once we’ve got some time to actually build it – in the meantime I’ll redirect it to point to the Google Code site.

  • BlitzKeyboard is live!

    After a mammoth coding session tonight I have committed the first version of BlitzKeyboard into the PixelBlitz Engine.

    I’m really happy with this work – it’s pretty much everything I’ve ever wanted from an advanced keyboard handler ๐Ÿ™‚

    So what can it do for you? In short it’s about saving you time. At the core is an extremely fast keyboard event handler, so all you need to do is ask it if a key is pressed or not:

    [as]
    if (keyboard.isDown(BlitzKeyboard.LEFT))
    {
    player.x -= playerXSpeed;
    }

    if (keyboard.isDown(BlitzKeyboard.RIGHT))
    {
    player.x += playerXSpeed;
    }
    [/as]

    Simple. Fast. Efficient. Of course if that was all it could do it would be nothing special – but it can do so much more …

    Multiple Key Support
    Accurate detection for one, two or three simultaneous key presses, including Location support. That means you can check for the difference between the left shift key and the right shift key. A full range of constants are built into the class, so rather than remember which keycode relates to which key, you just use our constants list. This list has been extended to support Enhanced keyboards, so you’ve got it detecting the Windows (or Apple Command) keys as well as the Application key.

    Set the Key Rate
    In an arcade game you need to pick-up the key presses as fast as possible, and BlitzKeyboard does just that. But you can also configure a Key Rate, so if you only want a certain key to fire once every second then that’s no problem.

    Bind Events or Functions to Keys
    You can set a key (or key combination) to fire an Event or call a Function. You control if the Event should fire when the key/s are pressed down, or fire on the release (when you let them go again). You pass in the Event and then set an event listener to listen out for it, and it handles the rest. It even takes the Key Rate into account, so your Event will only fire at the frequency you set.

    Wait Key support
    Say you need to wait for the user to press a key before proceeding with your game – then just use the waitKey() function! You pass it an Event and a type, and the next time a key is pressed the Event is dispatched, no matter which key caused it.

    Key Hit Counter
    Want to know exactly how many times a key has been pressed? Then call keyHit() on it and this method will tell you just that.

    I’ll be adding a few final features, and preparing the demos in the coming days. But the core class now exists in Google Code for the curious.

    Next up is BlitzMouse which will handle advanced mouse events – things like mouse zones, reporting on how fast the mouse is moving, scroll wheel handling and more.

  • PixelBlitz Update – addLimit() and removeLimit()

    While chatting to Norm on MSN we were both quite surprised at the lack of Game specific libraries / frameworks for AS3. Things that make creating a game as easy as possible for the developer. That is what we really want PixelBlitz to turn into, and I made another small step towards it today.

    I’ve commited r22 to Google Code, which contains two new commands: addLimit() and removeLimit(). They are as easy to use as this:

    [as]
    //ย ย ย  The Player
    player = new PixelSprite(new Bitmap(new plane1BD(0, 0)));

    //ย ย ย  Limit the player to the region starting from 100,100 down to 450,300
    player.addLimit(100, 100, 450, 300);
    [/as]

    Essentially all it does is limit the PixelSprite to a set region of the stage (in this case a 350×200 block in the middle). It’s far from earth shattering, but PixelBlitz is about helping you make your game quickly, with as clean code as possible, and all these little things build up over time.

    It means that when checking the keyboard to see if you can move the player, you no longer also need to check the X/Y position, because that is being handled for you.

    I’d post a demo, but I figure you can work out what it looks like already ๐Ÿ™‚