Saturday, May 8, 2010

Tips & Tricks to J2ME 3D Gaming...

Here I am going to share some experience that I had to face during my short j2me 3d gaming life. Actually I still do many mistakes while coding and consumes several hours sometimes for to catch them. So It is better for me and those who are new to this field to write down some important points which we all forget to focus or neglect to address.
**important:: you better have some considerable knowledge to understand these points because I am not going to explain them in detail.
1. After loading any image or drawing any object or font do not forget to call flushGraphic(). Otherwise No errors will come but relevant images or objects will not draw on the screen.
2. When using Gaming Canvas there are some restrictions regarding key events of the phone according to the way you call gameCanvas’s super class constructor. That means if you call in your constructor as “super (true) “it tells suppress some key events which calls from your class to it’s super class. If you want to assign events for every key then you have to call as “super (false)”. By default gameCanvas support for gaming keys only.
3. When dealing with sprites, specify their proportions correctly. That means if you are going to specify width and height for the sprite, it should be divided in to equivalent segments.
Ex: Suppose you want 10 by 10 sprites to move and total size of your image is 100 by 10. Then when specifying the width you should give 10 exactly to have 10 equal segments. Otherwise image will not load.
4. Use whatever updating code parts earlier than drawing code parts. Suppose in your game loop you first call draw method which takes care of drawing your stuff on the screen and then you call update method. Update method simply update positions of your objects, handle AI etc. If you call update after the draw function then those updates will apply in the next game loop. Actually it does not add much different to the game. But in some cases like low processing power phones it can be felt if your update method is complicated. So it is just better to use this as a best practice.
5. m3g world that you are going to load in to the phone memory can be a large one. It may contain lot of polygons. So when loading it to the screen and rendering it while in the game play, frames might not be smooth enough or game tends to be slow. So use separate m3g worlds and load them only when need. Try to reduce unwanted polygons in mesh objects as much as you can.
6. If you did load worlds as above you should definitely keep remember to null the unnecessary world objects later. Because you load those worlds and extract their objects and add them to a final one world. After that earlier world objects become use less. Otherwise it adds unwanted weight to the game and in some phones it causes to throw out of memory errors.
7. You load m3g world perfectly according to your code. But when you run it it only displays an empty screen with no errors. This is because some textures of your world might be lost or naming mistakes of images.
8. Reduce far clipping frame of your setPerspective method if you want to add some realistic view to the game such as loading distance objects when you are moving towards them. It also adds a little bit of speed to the game.
9. Use image of alphabet font in which fonts have been packed optimally. Use these fonts for menus, alerts and everything rather than using drawFont method because if you use drawFont, that font size and type may vary according to the phone and may not support as well. But if it is an image of course you can call each font separately and create your own messages.
10. Finally do not apply java’s object oriented concept much more. Because if you have written so many classes for each object then your game loop has to switch back and forth for retrieving objects and calling functions. This leads to consume some performance of the game in limited devices.

Saturday, May 1, 2010

Online Adaptive Game Design

For my 3rd year survey report, i have selected the topic "Adaptive Game Design". So I am doing some researches on it. I would like to share what I got familiar with this field so far as an Introduction (Below is an abstraction of my interim report)

When compare a commercial game with a specific commercial software product both in similar capacity, still publishers or rather companies tend to fear for directly involving for just games. That is why yet only a few leading well-known gaming companies are in the market. It is true that most of the games have indeed a real competitive game play. What developers try to do is make a player centered game which can satisfy its players at best while granting a competitiveness plus joy. AI for games has reached to its top today. Game world has been able to behave like in the real world with help of the advance physic and mathematical functions. Throughout the processes like modeling agents, coding, alpha, beta and game play testing, and making development kits for bugs and modifications, developers often concern for a particular limited group of potential users.

Throughout the history there are so many research papers have been written and have been practically applied for small scale games. Adaptation is a major topic not only in games but biological experiments, outer space explorations, nano evolutionary theory and many other engineering aspects. But what it differs from each field is that what technology optimally suits and in what extent it is going to be applied.

In this paper it is going to be demonstrated that still highly aggressive and competitive game play can be achieved with exceptive efficiency, effectively and robustness with help of dynamically adaptive gaming concepts and technologies. This adaptively can be either learning without human interaction (offline) or learning with human interaction during game play (online) [1]. This paper concerns most about online adaptive game development and its feasibility with current gaming life cycle. Adaptation can be defined as “ability to make appropriate responses to changed or changing circumstances” [2] plus learn from its past mistakes and acting like smart.

When it comes to the player’s role, there can be players those who are really smart thinking and play the game with their own logics. But some takes much time for completing a level and some are aggressive. Each of them has different views to the game and of course implementing a game which is capable of satisfying majority of these groups can be really hard to achieve. But throughout the playing life cycle of the game, modeling each player to a default weight and while in the game play, adjusting this weight to fit with player’s performance regarding the knowledge gathers from online statistics and player head up displays (HUDs) updates, adaptive decision making system can established inside the game.