Results 1 to 7 of 7
-
January 19th, 2004, 03:59 AM #120Registered User
postsisometric tile game (swapdepths problems?)
hi there,
I'm trying to create an isometric tile game engine, and everything was going well as long as the hero moved a whole tile at a time. I've now added code in to make the hero move more smoothly, but the depthswapping is wrong (until you move fully onto a new tile, and then it's corrected)
there's also a weird bug where if you scroll around the map fully a couple of times, then occassional tiles start disappearing, and whole lines get left in odd places on the screen.
would anyone be kind enough to take a quick look and see if they can see where I'm going wrong? - any help would be greatly appreciated.
there's an example of the swf here:
http://www.salmacis.co.uk/isometry/trials.html
and a zipped Flash 5 file (hopefully commented sufficiently!) here:
http://www.salmacis.co.uk/isometry/trials.zip
thanks again,
john
-
January 19th, 2004, 09:20 AM #2
Hoi
Ok am working on a iso type game too.
Not as far as you.
I looked at you fla and I hope you don't mind but I don't feel like looking through all your code
but I did note that you swap the depths of all your tiles and hero...bad idea. You are going to make a mess of all your depths so this is that I was thinking of 
Have each tile on its own depth and never change it. The topmost tile has the lows depth and the lowest tile have the highest depth. Then the have the rest of you tile in between that. Keep some space in between the depths of your tiles, 2 or more see attachment
just look at one of the tiles, if you look at the tiles above it your depths are all lower and if you look at the tile under it, are all higher
like this they are all nicely sorted. The spaces are for the hero to move around in. ok here is a function the calculates the depth
You can use this to put the tile on their right depth. To put the hero on the right depth just get the depth of the tile he is on and add one to it.Code:calculateDepth = function(x, z, worldXMax, worldZMax ) { var leeway = 2; var x = Math.abs(x)*leeway; var z = Math.abs(z)*leeway; var a = worldXMax; var b = worldYMax; var floor = a*(b-1)+x; var depth = a*(z-1)+x+floor; return depth; };
There
hope that helps

.....
-
January 19th, 2004, 09:47 AM #320Registered User
postscool - thanks for the reply.
I'll have a go at that tonight!
-
January 19th, 2004, 11:29 AM #420Registered User
postsbit quiet at work at the moment, so I thought I'd try it quickly. I had to change your code slightly as my tile (0,0) is the furthest left tile (as in the kirupa isometry tutorial) and got this:
PHP Code:function calculatedepth (tilecoordx, tilecoordy, obj) {
var factor = 2;
// factor is the space between 1 tile's depth and the next
var tiledepth = ((maplengthy-tilecoordy)*10)+(tilecoordx*factor);
if (obj == "tile") {
return tiledepth;
} else {
// for hero's depth:
return (tiledepth+1);
}
}
I've altered the draw map function to this:
which loops through the area around the hero, attaching a movieclip from the library to an empty clip each time it loops, and checks the map array which gives the frame number to display.PHP Code:function buildmap () {
for (var x = (herox-visx); x<=(herox+visx); x++) {
for (var y = (heroy-visy); y<=(heroy+visy); y++) {
var counter = calculatedepth(x, y, "tile");
trace (x+","+y+" depth: "+counter);
_root.scrollclip.attachMovie("tile", "t_"+x+"_"+y, counter);
_root.scrollclip["t_"+x+"_"+y]._x = spacing*(x+y);
_root.scrollclip["t_"+x+"_"+y]._y = spacing/2*(x-y);
frame = map1[x][y];
//
// if tile not defined in array, show blank tile
if (!frame) {
frame = 100;
}
_root.scrollclip["t_"+x+"_"+y].gotoAndStop(frame);
}
}
}
I've traced all my variables, and it's looping through the buildmap function correctly. I've traced the depths and drawn them all out and they're perfect, but now for some reason I'm getting whole blocks just not existing. When I display the variables in the output window, the missing objects aren't there (either not created or have been deleted for some reason I guess)
I'm stumped!
the only other function running is the one to create the empty container movie clip.
can anyone see where the error is? please!?
thanks again
john
here's an image of what's happening (there shouldn't be those blank tiles along the top left edge)
-
January 19th, 2004, 11:43 AM #520Registered User
postsdon't know if this helps but...
just noticed that it seems to be the 'visx' variable that determines how many blocks don't show.
'visx' is the number of tiles either side of the hero that will be shown.
if visx is 2 then 0 rows are missing (ie. everything is drawn correctly)
if visx is 3 then 2 rows are missing, (as in the image above)
if visx is 4 then 4 rows are missing,
if visx is 5 then 6 rows are missing ... and so on,
any help would be REALLY appreciated
cheers
-
January 19th, 2004, 12:05 PM #6
I havent looked at your code, but judging from what you are doing I would assume you are still having depth problems. the blocks are dissapearing because other blocks are taking their depth (or the hero is.) If I were going to look into the problem, I would check your depth code.
-
January 20th, 2004, 07:57 AM #7
APDesign was right it was still a depth prob

here I updated the function to work well with your buildmap function you just need to debug your other function.
Code:function calculatedepth(tilecoordx, tilecoordy, obj) { var factor = 2; var x = Math.abs(tilecoordx)*factor;// very importent !?! var y = Math.abs(tilecoordy)*factor;// very importent !?! var tiledepth = maplengthx*(x-1)-y; if (obj == "tile") { return tiledepth; } else { // for hero's depth: return (tiledepth+1); } }
.....

Reply With Quote

Bookmarks