| -
Registriert seit: Jan 2004
Beiträge: 3.002
| fehler suche/frage zum tut "tile based games" - auf tonypa.pri.ee
Hi!
irgendwie finde ich meinen Fehler nicht...grml
Es geht um Items-sammeln auf verschiedenen Maps!
Ich habe eigentlich alles exakt so gemacht wie im Tut beschrieben, nur dass ich 3 Maps habe und das Problem ist, dass wenn ich von einer map zur anderen gehe (nur beim rückwärts durch gehen der maps, wenn ich richtig getestet habe), die Items (zum einsammeln) von der map von der man auf die vorige gewechselt ist weiterhin sichtbar sind...
(ja-ich habe den bug-fix auf der site wahrgenommen  - aber mein prob. scheint woanders zu liegen!?!?)
ich habe die dazugehörigen functions mindestens jede 10 mal ganz genau durchgeschaut und konnte einefach nichts finden...
...kann mir da jemand sagen wo mein fehler ist?
ich habe einfach mal meinen kompletten code gepostet, falls das problem doch woanders liegen sollte:
(fla zum testen ist auch unten dabei) ActionScript: _root.attachMovie("empty", "detectKeysoEF", 10002); detectKeysoEF.onEnterFrame = function () { _root.detectKeys(); } myMap1 = [ [1,1,1,1,1,1,1,1,1,1], [1,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,1], [1,0,1,1,1,0,1,0,0,1], [1,0,1,0,1,0,1,0,0,1], [1,0,1,0,1,0,1,0,0,1], [1,0,1,0,1,1,1,1,0,1], [1,0,0,0,0,0,0,1,0,1], [1,0,0,0,0,0,0,1,0,2], [1,1,1,1,1,1,1,1,1,1] ]; myMap2 = [ [1,1,1,1,1,1,1,1,1,1], [1,0,0,0,0,0,0,0,0,1], [1,0,0,0,0,0,0,0,0,1], [1,0,1,1,1,0,0,0,0,1], [1,0,1,4,1,0,0,0,0,1], [1,0,1,0,1,0,0,0,0,1], [1,0,1,0,1,1,1,1,0,1], [1,0,1,0,0,0,0,1,0,1], [3,0,1,0,0,0,0,0,0,1], [1,1,1,1,1,1,1,1,1,1] ]; myMap3 = [ /*0*/[1,1,1,1,1,1,1,1,1,1], /*1*/[1,0,0,0,0,0,0,0,0,1], /*2*/[1,0,0,0,0,0,0,0,0,1], /*3*/[1,0,1,1,1,1,0,1,0,1], /*4*/[1,0,1,5,0,0,1,0,0,1], /*5*/[1,0,1,1,1,0,0,0,0,1], /*6*/[1,0,1,0,1,0,1,1,0,1], /*7*/[1,0,1,0,0,0,1,1,0,1], /*8*/[1,0,0,0,1,0,1,0,0,1], /*9*/[1,1,1,1,1,1,1,1,1,1] ]; myItems = [ [0], [[1,1,2],[2,5,5],[1,3,5]], [[2,1,1],[2,6,7],[1,3,5]], [[1,6,3],[1,3,6],[2,7,8]] ]; game = {tileW:30, tileH:30, currentMap:1, points:0}; game.TileClass = function () {}; game.TileClass.prototype.walkable = false; game.TileClass.prototype.frame = 20; game.Tile0 = function () {}; game.Tile0.__proto__ = TileClass.prototype; game.Tile0.prototype.walkable = true; game.Tile0.prototype.frame = 1; game.Tile1 = function () {}; game.Tile1.__proto__ = TileClass.prototype; game.Tile1.prototype.frame = 2; game.Doors = function (newMap, newcharx, newchary) { this.newMap = newMap; this.newcharx = newcharx; this.newchary = newchary; }; game.Doors.prototype.walkable = true; game.Doors.prototype.frame = 3; game.Doors.prototype.door = true; game.Tile2 = function () {}; game.Tile2.prototype = new game.Doors(2, 1, 8); game.Tile3 = function () {}; game.Tile3.prototype = new game.Doors(1, 8, 8); game.Tile4 = function () {}; game.Tile4.prototype = new game.Doors(3, 4, 4); game.Tile5 = function () {}; game.Tile5.prototype = new game.Doors(2, 3, 5); game.Item1 = function () {}; game.Item1.prototype.points = 1; game.Item2 = function () {}; game.Item2.prototype.points = 10; char = {xtile:1, ytile:1, speed:15}; function buildMap (Map) { _root.attachMovie("empty", "tiles", ++d); game.clip = _root.tiles; var mapWidth = Map[0].length; var mapHeight = Map.length; for (i = 0; i < mapHeight; i++) { for (j = 0; j < mapWidth; j++) { var name = "t_"+i+"_"+j; game[name] = new game["Tile"+Map[i][j]]; game.clip.attachMovie("tile", name, i*100+j*2); game.clip[name].gotoAndStop(game["Tile"+Map[i][j]].frame); game.clip[name]._x = j*game.tileW; game.clip[name]._y = i*game.tileH; game.clip[name].gotoAndStop(game[name].frame); } } game.items = myItems[game.currentMap]; for (var i = 0; i<game.items.length; i++) { var name = "item"+game.items[i][2]+"_"+game.items[i][1]; game[name] = new game["Item"+game.items[i][0]]; game[name].posi = i; game.clip.attachMovie("Items", name, 10001+i); game[name].clip = game.clip[name]; game[name].clip._x = game.items[i][1]*game.tileW+game.tileW/2; game[name].clip._y = game.items[i][2]*game.tileH+game.tileH/2; game[name].clip.gotoAndStop(game.items[i][0]); } _root.points = game.points; game.clip.attachMovie("char", "char", 10000); char.clip = game.clip.char; char.x = (char.xtile*game.tileW)+game.tileW/2; char.y = (char.ytile*game.tileH)+game.tileH/2; char.width = char.clip._width/2; char.height = char.clip._height/2; char.clip._x = char.x; char.clip._y = char.y; char.clip.gotoAndStop(char.frame); } function changeMap (ob) { var tempitems=[]; for (var i = 0; i<game.items.length; ++i) { if(game.items[i]) { var name = "item"+game.items[i][2]+"_"+game.items[i][1]; delete game[name]; tempitems.push(game.items[i]); } } myItems[game.currentMap]=tempitems; var name = "t_"+ob.ytile+"_"+ob.xtile; game.currentMap = game[name].newMap; ob.ytile = game[name].newchary; ob.xtile = game[name].newcharx; ob.frame = ob.clip._currentframe; buildMap(_root["myMap"+game.currentMap]); } function moveChar(ob, dirx, diry) { getMyCorners (ob.x, ob.y+ob.speed*diry, ob); if (diry == -1) { if (ob.upleft and ob.upright) { ob.y += ob.speed*diry; } else { ob.y = ob.ytile*game.tileH+ob.height; } } if (diry == 1) { if (ob.downleft and ob.downright) { ob.y += ob.speed*diry; } else { ob.y = (ob.ytile+1)*game.tileH-ob.height; } } getMyCorners (ob.x+ob.speed*dirx, ob.y, ob); if (dirx == -1) { if (ob.downleft and ob.upleft) { ob.x += ob.speed*dirx; } else { ob.x = ob.xtile*game.tileW+ob.width; } } if (dirx == 1) { if (ob.upright and ob.downright) { ob.x += ob.speed*dirx; } else { ob.x = (ob.xtile+1)*game.tileW-ob.width; } } ob.clip._x = ob.x; ob.clip._y = ob.y; ob.clip.gotoAndStop(dirx+diry*2+3); ob.xtile = Math.floor(ob.clip._x/game.tileW); ob.ytile = Math.floor(ob.clip._y/game.tileH); if (game["t_"+ob.ytile+"_"+ob.xtile].door and ob==_root.char) { changeMap (ob); } var itemname = game["item"+ob.ytile+"_"+ob.xtile]; if (itemname && ob == _root.char) { game.points += itemname.points; _root.points = game.points; removeMovieClip(itemname.clip); game.items[itemname.posi]=0; delete game["item"+ob.ytile+"_"+ob.xtile]; } 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); } if (!keyPressed) { ob.clip.char.gotoAndStop(1); } else { ob.clip.char.play(); } } function getMyCorners (x, y, ob) { ob.downY = Math.floor((y+ob.height-1)/game.tileH); ob.upY = Math.floor((y-ob.height)/game.tileH); ob.leftX = Math.floor((x-ob.width)/game.tileW); ob.rightX = Math.floor((x+ob.width-1)/game.tileW); 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; } buildMap(_root["myMap"+game.currentMap]); stop();
danke
Robert P.s: gehört das hier hin oder ins OOP-board?
wenn ins oop board, dann kann das ja vielleicht nen mod verschieben?!thx Edit:
ich habe doch etwas anders gemacht... ich habe bei den items statt "position" "posi" benutzt, da ab mx ja position für sound.position verwendet wird!
Geändert von pape (07-08-2004 um 06:24 Uhr)
|