-
Enough with being nostalgic already!
What do you have to say about my question above? Big data chunks, external files or hand written in layers?... etc....
-
Senior Member
Yeah most sites do want just one file because it's too much of an hassle otherwise. Basically this means you have to embed everything that you can.
You should pretty much always embed everything anyway unless you need to stream in some stuff.
If you want to have large chunks of text, you could just write classes that have static variables.
Static variables/functions are available always without instantiating the class.
Let's say you make a LevelData.as which looks like this
LevelData.as
code:
package{
public class LevelData{
public static var LEVEL_1:Array = new Array(level,data,and,stuff);
public static var LEVEL_2:Array = new Array(level,data,and,stuff);
public function LevelData(){
}
}
}
Put it in the same folder as your main fla/as file is and just use it like:
var levelArray:Array = LevelData.LEVEL_1;
When you compile, all external .as files you use will be included in the .swf
-
Hype over content...
Or host the external files yourself and just spread the swf around.
Squize.
-
Thanx, hatu, that looks good! I few basic questions though...
What does the keyword "package" do? As I could find in Flash Help, a package is just classes in a folder?...
And static.... is that for not having to create an actual instance of the class? Since it's created for the class, rather than for an instance (as I understood it from Flash Help)?...
Would you think it's a good idea to make a 2D-array for easier access?:
public static var LevelData: Array = new Array();
LevelData[1]=new Array(this, that, and that);
LevelData[2]=new Array(them, these and those);
etc.
-
Originally Posted by Squize
Or host the external files yourself and just spread the swf around.
Squize.
Ahh! And give them a level editor too, to host their own level data, and make your game engine the most popular Flash game on the planet!
-
Senior Member
Squize's idea is good too. That way you could even manage what sites can access the files.
Of course it needs reliable hosting and when your hosting is down(it will happen) no one can play it.
Package is pretty much just a different way to show the folder structure, in As3 all classes have to be inside packages so that's why I used just an empty one.
Let's say you have two folders, "images" and inside it "character"
Any .as files inside "character" should have this as their package images.character
Static is really good when you have data that needs to be accessed from multiple places easily. Static means that they are available without making a instance of the class.
If you need to access the leveldata only from one place then you could make them a normal class by removing the static keywords. Then you'd just need to make an instance of the class like
var levelData:LevelData = new LevelData();
and access any properties like
levelData.LEVEL_1
You should use 2D arrays because they're easier to handle. Just don't use the variable name LevelData because that's the class name already.
The LevelData function is a constructor which is called when you create a instance of it but that's the only place you can use the class name.
-
-
Heli Attack!
You can make it even easier by having a function return the data:
var level1:Array = LevelData.getLevel(1);
-
!!? It won't work "statically"!
I tried this test class (for "evils", which I call my baddies)
Code:
class EvilLevelData {
public static var Level_data:Array = new Array ();
public static var dada:Number;
public static var yadda=666;
public function EvilLevelData () {
Level_data[1] = new Array (1, 2, 3);
Level_data[2] = new Array (22, 2, 2);
dada=5;
}
static function get Dada() {
return dada;
}
Trying to get these data, with different methods:
Code:
var LevData:Array=new Array();
LevData=EvilLevelData.Level_data[1];
trace(LevData);
trace(EvilLevelData.dada);
trace(EvilLevelData.Dada);
trace(EvilLevelData.yadda);
yields:
undefined
undefined
undefined
666
Only yadda, defined before the constructor, was accessible. A getter didn't help and I also tried importing the class.
However, if I made an instance:
var evillevelData:EvilLevelData = new EvilLevelData();
it all worked!:
1,2,3
5
5
666
So, why isn't the static key word working?
What am I forgetting here?
-
Senior Member
You're assigning the values inside the constructor which only gets called if you make an instance of the class. Except for yadda.
Here's a couple of ways you can use them to do something like that.
Note that static properties and methods can't access anything non-static.
Code:
public static var level_data:Array = new Array(
new Array(1,2,3),
new Array(4,5,6)
);
public static function doStuff(things:String):void{
level_data.push(things);
}
or you could make something like a static init() function where you could just copypaste the code in the constructor and call that before accessing the values like a semi constructor
Last edited by hatu; 09-14-2008 at 07:22 PM.
-
Allright, thanx! Three choices, then. 1) Define the data in the public declaration 2) Make a static init() function or 3) make an instance of the class.
So, the question that remains - what is so bad about actually making an instance of the class? If I have a function for level change in my main time line, it will only be local.
I wanted to avoid defining while declaring, since I will have at least 4 dimensions in this array, and it will look messy. (for example [x,y] coordinates -> positions -> level data type -> levels)
-
Senior Member
Nothing wrong with that. In fact if you only need most of the data in the class in one place, it's better to make an instance of the class
-
Ok, great! All clear now! Thanx for your help!
-
Hi
Been reading this post, but i found out most of it is rather old, and AS2 related, so here's how i'm working (subject to change on my part with no prior notice):
first frame for the preloader
everything else on second frame, where all the parts of the game are created on runtime.
Most of the actual code would be in as3 files i import, where i define the classes for pretty much everything.
So everything an enemy would do, for example, would be in the Enemy class, which i instantiate upon creating the specific enemy. The enemy will in turn dispatch events to interact with the rest of the world, like to notify it's attacking, or dieing.
At least, this is what i'm trying to implement in the games i'm working on.
-
I don't tend to have too many frames on the timeline. I use Actionscript 3.0 and the only code I place on the timeline is stop();. I organize everything in classes. I have a main class that creates everything with a state engine. The next most important class is the Game class, which creates and runs the game. I then have classes for the objects in the game. I also use a framework, which contains a lot of classes I extend and other ones which I use functions from.
My first Flash game was written in Actionscript 2.0 though. It has 5 frames: The intro, the menu, the game, the game over screen and the leaderboards. I wrote things kind of like you did, a lot of main gameplay control on the timeline and the other stuff on instances.
-
When in doubt ask
Originally Posted by Gogafem
My first Flash game was written in Actionscript 2.0 though....
I code all my games in AS2 without any problem, and without any need for AS3.
<signature removed by admin>
-
Originally Posted by Eager Beaver
I code all my games in AS2 without any problem, and without any need for AS3.
It's really just personal preference. I like Actionscript 3.0 better though. Not just because of the syntax, but also because of all the game libraries available for it(Like Flixel, Citrus, Starling, Box2D) and 3D(Away3D, Flare3D). Also it's faster.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|