webForumDet fria alternativet

Tile based game

1 svar · 387 visningar · startad av Livijn

LivijnMedlem sedan mars 200630 inlägg
#1

Hej jag har gjort ett spel i flash, tile based, men hur gör jag för att göra en mål ruta!? Sen på målrutan ska det finns en slags mouseover effekt så man kommer till en annan frame.
Här är koden:

fscommand("allowscale", "false");
fscommand("showmenu", "false");
// matrisen anger kartan där 1 är fyllda och 0 är ofyllda bitar
myMap = [[1,1,1,1,1,1,1,1,1,1], 
		[1,0,0,0,0,0,0,0,0,1], 
		[1,0,1,0,0,0,0,0,0,1], 
		[1,0,0,0,0,1,0,0,0,1], 
		[1,0,0,0,0,0,0,0,0,1],
		[1,0,0,0,0,0,0,1,0,1], 
		[1,0,0,1,0,0,0,0,0,1], 
		[1,0,0,0,0,0,1,0,0,1], 
		[1,0,0,0,0,0,0,0,0,1], 
		[1,1,1,1,1,1,1,1,1,1]];
// anger plattornas bredd och höjd
game = {tileW:20, tileH:20};
// plattor man kan gå igenom
game.Tile0 = function () { };
game.Tile0.prototype.walkable = true;
game.Tile0.prototype.frame = 1;
game.Tale0.prototype.f
// väggplattor
game.Tile1 = function () { };
game.Tile1.prototype.walkable = false;
game.Tile1.prototype.frame = 2;
// deklarerar spelfiguren. xtile och ytile är den platta som spelfiguren startar i
char = {xtile:2, ytile:1, speed:4};
// bygger upp kartan
function buildMap(map) {
// lägger till ett tomt filmklipp och filmklippet med plattorna
_root.attachMovie("empty", "tiles", 1);
// deklarerar klipp i spelobjektet
game.clip = _root.tiles;
// kartans dimensioner
var mapWidth = map[0].length;
var mapHeight = map.length;
// loop för att placera plattorna på scenen
for (var i = 0; i<mapHeight; ++i) {
for (var j = 0; j<mapWidth; ++j) {
// namn på ny platta
var name = "t_"+i+"_"+j;
// skapa nytt plattobjekt i spelet
game[name] = new game["Tile"+map[i][j]]();
// bifogar filmklippets platta och placerar ut den
game.clip.attachMovie("tile", name, i*100+j*2);
game.clip[name]._x = (j*game.tileW);
game.clip[name]._y = (i*game.tileH);
// skickar filmklippets platta till rätt ram
game.clip[name].gotoAndStop(game[name].frame);
}
// lägger till spelfigurens filmklipp
}
game.clip.attachMovie("char", "char", 10000);
// deklarerar klippet i spelobjektet
char.clip = game.clip.char;
// räknar ut startpositionen
char.x = (char.xtile*game.tileW)+game.tileW/2;
char.y = (char.ytile*game.tileH)+game.tileH/2;
// lägger till spelfigurens dimension till spelobjektet, hälften av klippets bredd och höjd
char.width = char.clip._width/2;
char.height = char.clip._height/2;
// placerar ut spelfiguren
char.clip._x = char.x;
char.clip._y = char.y;
}
function getMyCorners(x, y, ob) {
// hitta hörnpunkterna
ob.leftX = Math.floor((x-ob.width)/game.tileW);
ob.rightX = Math.floor((x+ob.width-1)/game.tileW);
ob.downY = Math.floor((y+ob.height-1)/game.tileH);
ob.upY = Math.floor((y-ob.height)/game.tileH);
// kontrollera om spelplattorna är väggar
ob.upleft = game["t_"+ob.upY+"_"+ob.leftX].walkable;
ob.downleft = game["t_"+ob.downY+"_"+ob.leftX].walkable;
ob.upright = game["t_"+ob.upY+"_"+ob.rightX].walkable;
ob.downright = game["t_"+ob.downY+"_"+ob.rightX].walkable;
}
function moveChar(ob, dirx, diry) {
// Förflyttning vertikalt
getMyCorners(ob.x, ob.y+ob.speed*diry, ob);
// om riktningen är uppåt
if (diry == -1) {
if (ob.upleft and ob.upright) {
ob.y += ob.speed*diry;
} else {
// träff mot väggen, placering av spelfiguren intill väggen
ob.y = ob.ytile*game.tileH+ob.height;
}
}
// om riktningen är nedåt
if (diry == 1) {
if (ob.downleft and ob.downright) {
ob.y += ob.speed*diry;
} else {
// träff mot väggen, placering av spelfiguren intill väggen
ob.y = (ob.ytile+1)*game.tileH-ob.height;
}
}
// Förflyttning horisontellt
getMyCorners(ob.x+ob.speed*dirx, ob.y, ob);
// om riktningen är vänster
if (dirx == -1) {
if (ob.downleft and ob.upleft) {
ob.x += ob.speed*dirx;
} else {
// träff mot väggen, placering av spelfiguren intill väggen
ob.x = ob.xtile*game.tileW+ob.width;
}
}
// om riktningen är höger
if (dirx == 1) {
if (ob.upright and ob.downright) {
ob.x += ob.speed*dirx;
} else {
// träff mot väggen, placering av spelfiguren intill väggen
ob.x = (ob.xtile+1)*game.tileW-ob.width;
}
}
// uppdatera spelfigurens position
ob.clip._x = ob.x;
ob.clip._y = ob.y;
// vänd i riktningen, återgå till startfiguren
ob.clip.gotoAndStop(dirx+diry*2+3);
// räknar ut spelplattan som spelfigurens centrum befinner sig i
ob.xtile = Math.floor(ob.clip._x/game.tileW);
ob.ytile = Math.floor(ob.clip._y/game.tileH);
return (true);
}
function detectKeys() {
var ob = _root.char;
var keyPressed = false;
if (Key.isDown(Key.RIGHT)) {
keyPressed = _root.moveChar(ob, 1, 0);
} else if (Key.isDown(Key.LEFT)) {
keyPressed = _root.moveChar(ob, -1, 0);
} else if (Key.isDown(Key.UP)) {
keyPressed = _root.moveChar(ob, 0, -1);
} else if (Key.isDown(Key.DOWN)) {
keyPressed = _root.moveChar(ob, 0, 1);
}
// spelfigurens animation
if (!keyPressed) {
ob.clip.char.gotoAndStop(1);
} else {
ob.clip.char.play();
}
}
// skapa spelplanen/kartan
buildMap(myMap);
stop();

och här är en länk till spelet:
Spelet

LivijnMedlem sedan mars 200630 inlägg
#2

så det är ingen som vet!?

129 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)