| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Nov 2008
Beiträge: 21
| fortbewegungen anzeigen lassen
hi! ich habe ein kachelbasiertes (2d)labyrinth programmiert, in dem man einen helden mit den pfeiltasten ganz normal bewegen kann, d.h. bei betätigung der entsprechenden taste werden die x und y werte immer um 2 pixel verändert (selbst bei gedrückter pfeiltaste ist der held also nciht besonders schnell). jetzt habe ich ein algorithmus implementiert, der von selbst aus dem labyrinth herausfindet. der algorithmus nutzt dabei eigentlich auch zur fortbewegung die geschwindigkeit von 2 pixeln. dennoch ist es so, dass bei starten des algorithmus der held einfach vom start bis zum ziel "springt". über die trace funktion kann ich mir zwar die ganzen schritte ausgeben lassen, aber das alles innerhalb von millisekunden. ich möchte gerne sehen können, wie sich der held durchs labyrinth bewegt, mit der geschwindikeit als hätte man permanent die pfeiltasten gedrückt und nicht so, dass er einfach ganz plötzlich am ziel steht... hoffe, dass problem ist klar geworden und dass mir jemand weiterhelfen kann. schönen gruß |
| | |
| | #2 (permalink) |
| i ate pixels Registriert seit: Mar 2004 Ort: Augsburg
Beiträge: 528
|
führe die findenfunktion in einen onEnterFrame event aus
__________________ GTA ähnliches Auto mit HTML, CSS3 + JavaScript |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Nov 2008
Beiträge: 21
|
ich glaube, das ist bereits der fall =) das ganze ist mit as2 programmiert. in der .fla erstelle ich ein labyrinth objekt, das wiederum ein hero objekt erstellt und dieses hero objekt hat die funktion function onEnterFrame, die dann die finden-funktion aufruft =) oder ist das nicht dasselbe? zumindest hab ich in dieser onEnterFrame-Funktion auch die Pfeiltasten programmiert.
|
| | |
| | #4 (permalink) |
| i ate pixels Registriert seit: Mar 2004 Ort: Augsburg
Beiträge: 528
|
der code würde helfen
__________________ GTA ähnliches Auto mit HTML, CSS3 + JavaScript |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Nov 2008
Beiträge: 21
|
hier die game klasse (die das labyrinth baut und den hero dann reinsetzt) und die hero(char) klasse, die leider ziemlich groß ist. ich war beim kommentieren leider ziemlich faul. das wichtige hab ich fett markiert. die finden-funktion heißt pledgeAlgorithm und wird hier sofort aufgerufen. class Game extends MovieClip { //hero var char:Char; function Game() { char = new Char(); var myLabyrinth:Labyrinth = new Labyrinth(); myLabyrinth.buildMap(); } } class Char extends MovieClip { var lab:Labyrinth; //Startpositionen var xtile = 7; var ytile = 2; //Pixel-Geschwindigkeit var speed = 2; var path; //Der Char kann sich auf bis zu 4 Positionen befinden var columnLeft:Number; var columnRight:Number; var rowUp:Number; var rowDown:Number; var upleft:Boolean; var upright:Boolean; var downleft:Boolean; var downright:Boolean; //Die eigentliche Höhe und Breite durch 2 teilen und in diesen Variablen speichern. var width = 4; var height = 4; var char:MovieClip; function Char() { this.lab = new Labyrinth(); char = _root.labyrinth_mc.attachMovie("char", "char_mc", 10000); this.char = _root.labyrinth_mc.char_mc; //Um die Startposition des Charakters zu bestimmen! siehe unten (path._x usw.) var x = (xtile * lab.spacing)+lab.tileW/2; var y = (ytile * lab.spacing)+lab.tileH/2; char._y = y; char._x = x; } function onEnterFrame() { pledgeAlgorithm(); if (Key.isDown(Key.RIGHT)) { gridPosition(char._x + speed, char._y); if(upright and downright) { char._x += speed; } } else if (Key.isDown(Key.LEFT)) { gridPosition(char._x - speed, char._y); if(downleft and upleft) { char._x -= speed; } } else if (Key.isDown(Key.UP)) { gridPosition(char._x, char._y - speed); if(upright and upleft) { char._y -= speed; } } else if (Key.isDown(Key.DOWN)) { gridPosition(char._x, char._y + speed); if(downleft and downright) { char._y += speed; } } } function gridPosition(x, y) { columnLeft = Math.floor((x - width) / lab.spacing); columnRight = Math.floor((x + width) / lab.spacing); rowUp = Math.floor((y - height) / lab.spacing); rowDown = Math.floor((y + height) / lab.spacing); upleft = lab.myLabyrinth[rowUp][columnLeft].getWalkable(); upright = lab.myLabyrinth[rowUp][columnRight].getWalkable(); downleft = lab.myLabyrinth[rowDown][columnLeft].getWalkable(); downright = lab.myLabyrinth[rowDown][columnRight].getWalkable(); trace("cl: "+columnLeft+" cr: " + columnRight + " ru " + rowUp + " rd " + rowDown); } var zaehler = 0; function pledgeAlgorithm() { if(zaehler == 0) { if(moveUp() == true) { moveUp(); } else { zaehler--; } } if(zaehler == -1) { if(moveUp() == false) { if(moveRight() == true) { moveRight(); } else { zaehler--; } } else zaehler++; } if(zaehler == -2) { if(moveRight() == false) { if(moveDown() == true) { moveDown(); } else { zaehler--; } } else { zaehler++; } } if(zaehler == -3) { if(moveDown() == false) { if(moveLeft() == true) { moveLeft(); } else { zaehler--; } } } pledgeAlgorithm(); } //move-Funktionen für den pledge Algorithmus function moveRight():Boolean { gridPosition(char._x + speed, char._y); if(upright and downright) { char._x += speed; return true; } else { return false; } } function moveLeft() { gridPosition(char._x - speed, char._y); if(downleft and upleft) { char._x -= speed; return true; } else { return false; } } function moveUp() { gridPosition(char._x, char._y - speed); if(upright and upleft) { char._y -= speed; return true; } else { return false; } } function moveDown() { gridPosition(char._x, char._y + speed); if(downleft and downright) { char._y += speed; return true; } else { return false; } } } |
| | |
| | #6 (permalink) |
| i ate pixels Registriert seit: Mar 2004 Ort: Augsburg
Beiträge: 528
|
hm du führst die funktion pledgeAlogrithm() in der selbigen am schluss aus? kann das sein? blicke da nicht ganz durch ohne tabs uns ![]() am besten auf nopaste.org gehen und da nochmal posten und hier den link dazu :-) oder die code funktionen des boards benutzen [ A S ] dein code [ / A S ] (ohne leerzeichen) zb ActionScript:
__________________ GTA ähnliches Auto mit HTML, CSS3 + JavaScript |
| | |
| | #7 (permalink) |
| Neuer User Registriert seit: Nov 2008
Beiträge: 21
|
ja ist richtig.. die funktion ist rekursiv, hat aber keine abbruchbedingung ^^ (kommt alles noch!) aber es geht ja auch darum, warum man die einzelnen bewegungen des helden nicht sehen kann, denn die funktion bringt ihn ja trotz der endlosschleife voran. hier ist der link: http://nopaste.org/p/a2QHr2owbb schon mal danke an dieser stelle! |
| | |
| | #8 (permalink) |
| i ate pixels Registriert seit: Mar 2004 Ort: Augsburg
Beiträge: 528
|
nunaj du führst die funktion jeden frame aus. auch wenns nur ein frame ist wird die funktion 24 mal pro sekunde bei 24 fps aufgerufen und die funktion ruft sich selbst auf ... irgendwie klar das das gleich fertig ist :-) es reicht wenn die funkton bei onEnterFrame ausgeführt wird :-)
__________________ GTA ähnliches Auto mit HTML, CSS3 + JavaScript |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |