Zurück   Flashforum > Flash > ActionScript > Spielkonzepte und Spieleprogrammierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 15-06-2009, 11:15   #1 (permalink)
Neuer User
 
Registriert seit: Apr 2009
Beiträge: 7
Question Komplexer Plattformhüpfer - dringend Hilfe gesucht

Hallihallo,
ich habe den Einführungstext gelesen und war mir nicht ganz sicher, ob ich mit einigen Fragen zur Spieleprogrammierung hier überhaupt auftauchen darf. Aber es geht um spezielle Fragen, ich arbeite schon seit 3 Wochen daran und es passt einfach genau hier rein. Also mach ichs einfach.

Ich arbeite an einem komplexeren Jump N Run. Es geht also nicht nur um Plattformen und Diamanten einsammeln, sondern auch um Gleitsprünge, Lianen, bewegte Plattformen, Schuss-Funktionen und Gegner mit KI.

Über gängige Tutorials bin ich nun schon hinaus. Es hapert nun ein wenig am Verständnis, denke ich.

Folgende 4 Probleme bringen mich zur Weißglut:
(allein schon einige Ratschläge zu einem Problem würden mir bestimmt sehr helfen)

1.) Das Spiel läuft mit vielen Funktionen ab, die immer wieder durchlaufen werden. Dadurch kann ich oft nur den ersten Frame einer Animation sehen.
Konkretes Beispiel: Wenn meine Figur in die Luft springt und dann anfängt zu gleiten (Drücken von CTRL), sehe ich wunderbar die komplette Animation solange ich die Taste gedrückt halte. Aber sobald ich mich dabei nach Rechts oder Links bewege (also zusätzlich LEFT oder RIGHT drücke), bin ich im ersten Frame der Sprunganimation.
Ähnlich ist es an der Liane. Egal ob rauf oder runter, es ist immer nur starr das erste Frame der Kletter-Animation zu sehen.

Meine Idee war nun, IN die Lianenfunktion eine Lianenanimationsfunktion zu legen. Also solange die Funktion greift, die dafür verantwortlich ist, dass die Figur an der Liane kleben bleibt, solange soll eine andere Funktion abgespielt werden, die immer wieder die Kletteranimation zeigt... hat aber irgendwie nicht funktioniert.

NUMMER 2 bereits GELÖST
2.) Per SPACE kann man schon sehr schön in beide Richtungen Kokosnüsse verschießen. Leider scheiterten bisher alle Versuche, einen Hittest mit einem Gegner zu realisieren. Sind meine Kokosnüsse Variablen, die ich einfach falsch bestimme? Ich habe schon Funktionen dafür geschrieben UND es in dem Gegner direkt reingeschrieben, beides leider ohne jegliches Ergebnis.
Im Movieclip des Gegner befindet sich noch ein Part mit einer Sterbe-Animation, an dessen Ende ein UnloadMovie-Befehl steht. Aber leider komme ich nie dahin, dass dieser abgespielt wird.

3.) Es funktioniert schon, dass die Figur bei Feindberührung blinkt, kurz unverwundbar ist und einen Punkt von der Variable "health" abgezogen bekommt. Leider bin ich noch nicht dorthin gekommen, dass die sterbeanimation abgespielt wird und die Figur danach entladen wird. Und dann natürlich auch wieder an einer Startposition eingesetzt wird. Hier tappe ich arg im Dunkeln. Bisher bin ich an der alten Problemstelle: Gesundheit geht auf 0, ich gehe zur Sterbeanimation, sehe dort das erste Bild und weiter passiert nichts.

Problem 4 gelöst, wenn auch nur mit alternativer Lebensleiste
4.) Die Verbindung zwischen Lebensleiste und der Variable Health. Hier habe ich sehr sonderbares erlebt. Die Funktion dazu sollte für jeden Lebenspunkt weniger ein Stück der Lebensleiste unsichtbar machen oder entladen. Aber das Ergebnis war, dass meine Lebensleiste automatisch runtergesetzt wurde. Als ob der if-Befehl gleich übergangen wurde. Sehr seltsam.


Das sind die 4 Knackpunkte, an denen ich mich aufhalte. Ich bin sogar sicher, dass die Problemzonen bei meinem Verständnis von Funktionsaufbau liegt. Aber momentan komme ich nicht weiter und wäre für jede Hilfe sehr dankbar. Ich kopiere mein AS mit hier rein, wobei dann natürlich noch einige kleine Scripte in den Objekten fehlen. Meistens beziehen sich diese aber nur auf Bewegungen und nix Fundamentales.

Wer mal in meine Datei reinschauen möchte, findet sie hier. (kann 10mal runtergeladen werden, danach bitte mal bescheid sagen)
Ich hoffe, es wird diesem Bereich des Forums gerecht. Ich arbeite wirklich mehrere Stunden am Tag an dieser Datei. Es ist ne Aufgabe meines Praktikums und ich habe keine weiteren Ansprechpartner.

Vielen Dank an alle.
Bye bye

Geändert von RobRock (16-06-2009 um 10:37 Uhr)
RobRock ist offline   Mit Zitat antworten
Alt 15-06-2009, 11:16   #2 (permalink)
Neuer User
 
Registriert seit: Apr 2009
Beiträge: 7
PHP-Code:
var game:Object = new Object();
boneyboy_mc.step 5;
boneyboy_mc.attack false;
boneyboy_mc.stance 1;
boneyboy_mc.lookright true;
boneyboy_mc.lookleft false;
boneyboy_mc.velocity 0;
boneyboy_mc.heli 2;
boneyboy_mc.helicopter false;
boneyboy_mc.gravity 2;
boneyboy_mc.falling true;
boneyboy_mc.jumping false;
boneyboy_mc.sprungkraft = -15;
boneyboy_mc.nutspeed 12;
boneyboy_mc.gotnuts true;
boneyboy_mc.nutdelay 550;
boneboy_mc.nutarray = [];
boneyboy_mc.nutcount 0;
boneyboy_mc.injured false;
boneyboy_mc.online false;
boneyboy_mc.timer 30;

health 1;
punkte 0;

boneyboy_mc.leftBorder 0;
boneyboy_mc.rightBorder 550;



function 
dying() {
    if (
health<=0) {
        
boneyboy_mc.gotoAndStop("dead");
    }
}



function 
lianen() {


    for (var 
1q<=8q++) {
        var 
liane = eval("_root.liane_"+q+"_mc");

        if (
_root.boneyboy_mc.hitTest(liane)) {

            
_root.boneyboy_mc.falling false;
            
_root.boneyboy_mc.velocity 0;
            
_root.boneyboy_mc.gravity 0;
            
_root.boneyboy_mc.online true;
            
_root.boneyboy_mc.jumping false;
            
_root.boneyboy_mc.helicopter false;
            
_root.boneyboy_mc.gotoAndStop("climb");
            break;
        } else {
            
_root.boneyboy_mc.gravity 2;
            
_root.boneyboy_mc.falling true;
            
_root.boneyboy_mc.online false;
        }
    }



}

function 
Flash(obt) {
    
//USING THE MODULO OPERATOR TO TELL US WHEN THE GIVEN NUMBER DIVIDES EXACTLY INTO 0
    //WILL ALLOW US TO ACTIVATE THE CODE IN THE CONDITION AT CHOSEN FRAMES 
    
if ((t%2) == 0) {
        
ob._alpha 10;
    } else {
        
ob._alpha 90;

    }
//WHEN THE TIMER IS AT 0 WE SET RICK TO FULLY VISIBLE AND SWITCH OFF HIS INVINCIBILITY

    
if (t<=0) {
        
ob.timer 30;
        
//ob._visible=true;
        
ob._alpha 100;
        
ob.injured false;

    }
}

function 
blinking() {

    if (
boneyboy_mc.injured) {
        
Flash(boneyboy_mc,boneyboy_mc.timer--);

    }

}


function 
enemy() {


    if (
_root.biene_mc.hitTest(_root.boneyboy_mc) && !boneyboy_mc.injured) {
        
boneyboy_mc.injured true;
        
health -= 1;
        
zeit getTimer()+5000;

        if (
getTimer>zeit) {

            
boneyboy_mc.injured false;
        }

    }
}

function 
explo() {

    if (
_root.biene_mc.hitTest(_root.coconut_mc)) {
        
_root.biene_mc.gotoAndPlay("explo");
    }
}

function 
createnuts() {
    if (
boneyboy_mc.lookright == true) {

        var 
nutMc _root.attachMovie("coconut_mc""coconut_mc"+boneyboy_mc.nutcount1000+boneyboy_mc.nutcount);
        
nutcount++;
        
nutMc._x _root.boneyboy_mc._x;
        
nutMc._y _root.boneyboy_mc._y;
        
boneyboy_mc.nutarray.push(nutMc);
    } else if (
boneyboy_mc.lookright == false) {
        var 
nutMc2 _root.attachMovie("coconutleft_mc""coconutleft_mc"+boneyboy_mc.nutcount1000+boneyboy_mc.nutcount);
        
nutcount++;
        
nutMc2._x _root.boneyboy_mc._x;
        
nutMc2._y _root.boneyboy_mc._y;
        
boneyboy_mc.nutarray.push(nutMc2);
    }

}

function 
movenuts() {
    if (
boneyboy_mc.gotnuts == true && Key.isDown(Key.SPACE)) {
        
_root.boneyboy_mc.gotoAndStop("punch");
        
boneyboy_mc.gotnuts false;
        
currentTime getTimer();
        
createnuts();
    } else {
        if (
currentTime+boneyboy_mc.nutdelay<=getTimer()) {
            
boneyboy_mc.gotnuts true;
        }
    }

}

function 
position() {
    
tempX _root.boneyboy_mc._x;
    
tempY _root.boneyboy_mc._y;
}

function 
collision() {


    for (var 
1t<=8t++) {
        var 
name2 = eval("_root.plattform_"+t+"_mc");

        if (
_root.boneyboy_mc.huelle_mc.hitTest(name2)) {

            
_root.boneyboy_mc._y tempY;
            
_root.boneyboy_mc._x tempX;
            break;

        }
    }
}

function 
gravity() {


    for (var 
1i<=8i++) {
        var 
name = eval("_root.plattform_"+i+"_mc");

        if (
_root.boneyboy_mc.hitbereich.hitTest(name)) {
            
_root.boneyboy_mc.falling false;
            
_root.boneyboy_mc.velocity 0;

            
_root.boneyboy_mc.hitbereich_mc._y name._y;
            
_root.boneyboy_mc.jumping false;
            
_root.boneyboy_mc.helicopter false;
            break;
        }
    }


    if (
_root.boneyboy_mc.falling == true) {
        
_root.boneyboy_mc.velocity += (_root.boneyboy_mc.gravity)/2;
        
_root.boneyboy_mc._y += _root.boneyboy_mc.velocity;

    }
}

function 
jumpstyle() {
    if (
Key.isDown(Key.UP) && _root.boneyboy_mc.online == true) {
        
_root.boneyboy_mc._y -= 3;
        
_root.boneyboy_mc.gotoAndStop("climb");
    } else if (
Key.isDown(Key.DOWN) && _root.boneyboy_mc.online == true) {
        
_root.boneyboy_mc._y += 3;
        
_root.boneyboy_mc.gotoAndStop("climb");

    } else if (
Key.isDown(Key.UP) && _root.boneyboy_mc.falling == false) {
        
_root.boneyboy_mc.falling true;
        
_root.boneyboy_mc.jumping true;
        
_root.boneyboy_mc.velocity _root.boneyboy_mc.sprungkraft;
        
_root.boneyboy_mc._y += _root.boneyboy_mc.velocity;
        
_root.boneyboy_mc.gotoAndStop("jump");

    } else if (
Key.isDown(Key.CONTROL) && _root.boneyboy_mc.jumping == true) {
        
_root.boneyboy_mc.velocity _root.boneyboy_mc.heli;
        
_root.boneyboy_mc.falling true;
        
_root.boneyboy_mc.jumping true;
        
_root.boneyboy_mc.helicopter true;
        
_root.boneyboy_mc.gotoAndPlay("heli");
    }
}

function 
animations() {
    if (
Key.isDown(Key.CONTROL) && _root.boneyboy_mc.jumping == true) {
        
_root.boneyboy_mc.gotoAndStop("heli");

    }
    if (
Key.isDown(Key.LEFT) && _root.boneyboy_mc.helicopter == true) {

        
_root.boneyboy_mc.gotoAndStop("heli");
    }
}


function 
movement() {
    if (
Key.isDown(Key.LEFT)) {
        if (
_root.boneyboy_mc.jumping == false) {
            
//Levelgrenze
            
if (_root.boneyboy_mc._x>_root.boneyboy_mc.leftBorder) {
                
_root.boneyboy_mc._x -= _root.boneyboy_mc.step;
                
_root.boneyboy_mc.gotoAndStop("walk");
                
_root.boneyboy_mc._xscale = -100;
                
_root.boneyboy_mc.lookright false;
                
_root.boneyboy_mc.lookleft true;
            }
        }
    }
    if (
Key.isDown(Key.RIGHT)) {
        if (
_root.boneyboy_mc.jumping == false) {
            
//Levelgrenze
            
if (_root.boneyboy_mc._x<_root.boneyboy_mc.rightBorder) {
                
_root.boneyboy_mc._x += _root.boneyboy_mc.step;
                
_root.boneyboy_mc.gotoAndStop("walk");
                
_root.boneyboy_mc._xscale 100;
                
_root.boneyboy_mc.lookright true;
                
_root.boneyboy_mc.lookleft false;
            }
        }
    }
    if (
Key.isDown(Key.LEFT)) {
        if (
_root.boneyboy_mc.jumping == true) {
            
//Levelgrenze
            
if (_root.boneyboy_mc._x>_root.boneyboy_mc.leftBorder) {
                
_root.boneyboy_mc._x -= _root.boneyboy_mc.step;
                
_root.boneyboy_mc.gotoAndStop("jump");
                
_root.boneyboy_mc._xscale = -100;
            }
        }

    } else if (
Key.isDown(Key.RIGHT)) {
        if (
_root.boneyboy_mc.jumping == true) {
            
//Levelgrenze
            
if (_root.boneyboy_mc._x<_root.boneyboy_mc.rightBorder) {
                
_root.boneyboy_mc._x += _root.boneyboy_mc.step;
                
_root.boneyboy_mc.gotoAndStop("jump");
                
_root.boneyboy_mc._xscale 100;
            }
        }
    } else if (!
Key.isDown() && boneyboy_mc.jumping == false) {
        
_root.boneyboy_mc.gotoAndStop("stance");
    }
}


_root.boneyboy_mc.onEnterFrame = function() {
    
gravity();
    
enemy();
    
movement();
    
jumpstyle();
    
movenuts();
    
collision();
    
position();
    
animations();
    
lianen();
    
blinking();
    
animations2();
    
dying();
    
explo();
}; 
RobRock ist offline   Mit Zitat antworten
Alt 17-06-2009, 17:39   #3 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Unterhaching/München
Beiträge: 513
hallo.
deine frage ist viel zu ausschweifend, als das jemand antworten könnte.
soviel code schaut sich niemand durch, es sei denn, er kann nicht
schlafen...

Versuch doch direkter nachzufragen.
Gruß,
dr.ache
malthoff ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
jump n run, plattform, spiel, spiel programmiermieren

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 18:19 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele