Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 08-10-2004, 20:08   #1 (permalink)
User
 
Benutzerbild von jeypack
 
Registriert seit: Sep 2003
Ort: Essen
Beiträge: 616
Steuerung für Avator

Hi Leute,

hab da mal ne Steuerung für eine Spielfigur gebaut und wollte eure Meinung hören. Vielleicht habt ihr ja irgendwelche Verbesserungsvorschläge.

Und hier das Script:

PHP-Code:
stop();
// Avator Kontruktor
buildPlayer = function (isLoadedbusyposXposYdirectionspeedFaktoralpha) {
    
this.isLoaded isLoaded;
    
this.busy busy;
    
this.posX posX;
    
this.posY posY;
    
this.direction direction;
    
this.speedFaktor speedFaktor;
    
this.speed 0;
    
this.alpha alpha;
};
avator = new buildPlayer(falsefalse00040);
// methoden
avator.init = function() {
    
// frontansicht des players einstellen
    
this.setPosition(this.direction);
    
// scale berechnung vorbereiten
    
scr screen.getBounds(_root);
    
player._alpha this.alpha;
    
player._xscale player._y*100/scr.yMax;
    
player._yscale player._xscale;
    
// farbobjekt erstellen und einfaden
    
this.farbe = new Color(player);
    
_root.onEnterFrame = function() {
        
avator.alpha += (100-avator.alpha)/5;
        
avator.getFarbe(100avator.alpha);
        if (
player._alpha>98) {
            
avator.getFarbe(100100);
            
avator.isLoaded true;
            
delete _root.onEnterFrame;
        }
    };
};
avator.getFarbe = function(brightnessalpha) {
    
avator.farbwerte = {ra:brightnessrb:'0'ga:brightnessgb:'0'ba:brightnessbb:'0'aa:alphaab:'0'};
    
avator.farbe.setTransform(avator.farbwerte);
};
avator.directWay = function(xy) {
    
// abstand berechnen
    
var delta_x x-player._x;
    var 
delta_y y-player._y;
    
// bogenmaß berechnen
    
var radians Math.atan2(delta_ydelta_x);
    if (
delta_y<0) {
        
radians += (2*Math.PI);
    }
    
// bogenmaß in grad umrechnen
    
var degrees Math.floor(radians/(Math.PI/180));
    if (
degrees>57 && degrees<=123) {
        return 
0;
    } else if (
degrees>123 && degrees<=171) {
        return 
1;
    } else if (
degrees>171 && degrees<=190) {
        return 
2;
    } else if (
degrees>190 && degrees<=237) {
        return 
3;
    } else if (
degrees>237 && degrees<=303) {
        return 
4;
    } else if (
degrees>303 && degrees<=351) {
        return 
5;
    } else if (
degrees>351 or degrees<=10) {
        return 
6;
    } else if (
degrees>10 && degrees<=57) {
        return 
7;
    }
};
avator.go = function() {
    
// wenn die maus
    
if (screen.hitTest(_root._xmouse_root._ymousetrue)) {
        return 
true;
    } else {
        return 
false;
    }
};
avator.setPosition = function(whichOne) {
    
// stellt eine entsprechende Richtung ein und stoppt
    
for (var 0i<=7i++) {
        
player["p"+i]._visible false;
        
player["p"+i].gotoAndStop(1);
    }
    
player["p"+whichOne]._visible true;
    
player["p"+whichOne].gotoAndStop(1);
    
avator.direction whichOne;
};
avator.move = function(whichOneposXposY) {
    
this.busy true;
    
avator.posX posX;
    
avator.posY posY;
    
targetPoint placeholder.attachMovie("goAhead""goAhead"2);
    
targetPoint._x posX;
    
targetPoint._y posY;
    
targetPoint._xscale _root._ymouse*100/scr.yMax;
    
targetPoint._yscale targetPoint._xscale-10;
    
avator.setPosition(whichOne);
    
player["p"+whichOne].play();
    
player.onEnterFrame = function() {
        
avator.speed Math.pow(this._xscale2)/Math.pow(104)*avator.speedFaktor;
        
// berechne den winkel der pos zum zielpunkt 0-180 / -180-0
        
var delta_x this._x-posX;
        var 
delta_y this._y-posY;
        
rotation = -Math.atan2(delta_xdelta_y)/(Math.PI/180);
        if (
Math.sqrt((delta_x*delta_x)+(delta_y*delta_y))>avator.speed) {
            
this._x += avator.speed*Math.sin(rotation*(Math.PI/180));
            
this._y -= avator.speed*Math.cos(rotation*(Math.PI/180));
            
this._xscale this._y*100/scr.yMax;
            
this._yscale this._xscale;
        } else {
            
this["p"+whichOne].gotoAndStop(1);
            
targetPoint.removeMovieClip();
            
avator.busy false;
            
delete player.onEnterFrame;
        }
    };
};
avator.init();
//------------------------------------------------------------------------------------>
_root.onMouseDown = function() {
    if (
avator.go() && avator.isLoaded && !avator.busy) {
        
whichOne avator.directWay(Math.floor(_root._xmouse), Math.floor(_root._ymouse));
        
avator.move(whichOneMath.floor(_root._xmouse), Math.floor(_root._ymouse));
    }
}; 
Mal anschauen

Rückfragen und Feedback sind also erwünscht.

Gruß
Jörg
jeypack ist offline   Mit Zitat antworten
Alt 08-10-2004, 20:47   #2 (permalink)
walnut
 
Benutzerbild von Milon
 
Registriert seit: Feb 2003
Ort: planet nuts
Beiträge: 472
Beeindruckend.

Aber was mir auffält.
Ist das Absicht, daß man keine neue Richtung geben kann, bevor er nicht die alte erreicht hat?
__________________
speednuts interactive
Milon ist offline   Mit Zitat antworten
Alt 08-10-2004, 20:52   #3 (permalink)
User
 
Benutzerbild von jeypack
 
Registriert seit: Sep 2003
Ort: Essen
Beiträge: 616
Zitat:
Ist das Absicht, daß man keine neue Richtung geben kann, bevor er nicht die alte erreicht hat?
Si, ist Absicht. Aber man kann das nach Belieben abändern, indem man beim onMouseDown-Event '&&!avator.busy' streicht.
Ist doch eigentlich sinnvoller wenn so eine Funktion integriert ist, oder? Könnte schließlich im 'realen Einsatz' Ärger verursachen.
jeypack ist offline   Mit Zitat antworten
Alt 09-10-2004, 12:21   #4 (permalink)
oFo
Neuer User
 
Benutzerbild von oFo
 
Registriert seit: Oct 2004
Beiträge: 264
Wink

Sieht sehr nice aus!
Was meinst Du mit Ärger?
Ich bin auch eher der Meinung, dass es ein gutes Feature wäre, wenn
man das Ziel beim Laufen verändern könnte. Ansonsten könnte man
im 'realen' Einsatz kaum auf das Spielgeschehen reagieren, je nachdem
was Du geplant hast. Zudem wäre es nervig zu warten bis die Spielfigur
sein Ziel erreicht hat, wenn man sich einfach nur verklickt hat und
das schnell korrigieren möchte.
oFo ist offline   Mit Zitat antworten
Alt 09-10-2004, 13:22   #5 (permalink)
User
 
Benutzerbild von jeypack
 
Registriert seit: Sep 2003
Ort: Essen
Beiträge: 616
@oFo: danke erstmal für das feedback.
Von wegen Ärger, ist es bei dieser Variante natürlich überflüssig (hab ich gleich mal bei dem Beispiel geändert),aber bei so etwas wie einem point-and-click-adventure-game gibt es zwei Möglichkeiten. Einmal kannst du den Avator einfach in der Gegend rumlaufen lassen, zum anderen kann man irgendwelche Gegenstände anklicken, die dann ihrerseits wieder weitere Aktionen auslösen aber erst wenn der Avator sein Ziel erreicht hat (wäre ja ansonsten fast überflüssig das der Avator läuft). Neulich habe ich so ein Spiel gebaut, was leider erst demnächst zu besichtigen ist. Dabei habe ich mit zunehmenden Spielumfang Ärger mit der Avatorsteuerung bekommen.
Aber im Grunde genommen hast du natürlich Recht. Bei dem nächsten Auftrag werde ich mich da noch mal dransetzen.

Variante2
jeypack ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele