Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-09-2004, 20:36   #1 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Reinitialisieren/Reset von Funktionen / schiefer Wurf

Hi,

ich bastel gerade ein Spiel, in dem ein Delfin einen Ball anstupst und damit einen Basketballkorb treffen muss.

Mit dn Pfeiltasten bestimmt man den Winkel, mit dem der Delfin auf den Ball trifft, mit der Leertaste holt man „Schwung“.

Ansehen könnt ihr euch das hier (vorher einmal in die swf klicken, um Focus auf die swf zu legen).

Mein Problem ist es, das nachdem der Ball abgeschossen wurde und das Ziel getroffen bzw. verfehlt hat, das ganze wieder in Ausgangslage zu versetzen. Also den Ball wieder an den Start zu platzieren, den Delfin darunter, und alle Funktionsaufrufe, Intervale, Handler zu löschen.

Hat jemand einen Vorschlag dazu?

So sieht das Script dazu aus:

PHP-Code:
//Actionscript 1.0
var timelimit=120;
var 
score=0;
_root.time.text=timelimit;
_root.angle.text=0;
_root.points.text=0;
_root.impindicator._xscale=0;
var 
startBall_x=_root.ball._x;
var 
startBall_y=_root.ball._y;
var 
startDolfin_x=_root.dolfin._x;
var 
startDolfin_y=_root.dolfin._y;

var 
increaseTime=function()
    {
    if(
timelimit>0)
        {        
        
timelimit--;
        
_root.time.text=timelimit;
        }
    else
        {
        
clearInterval(timer);
        }
    }
var 
timer=setInterval(increaseTime,1000);

    
MovieClip.prototype.launch=function(alpha0,v0
    {
    var 
t0=0;
    var 
v=v0;
    var 
alpha=alpha0*Math.PI/180;
    var 
g=9.81;
    var 
x=this._x;
    var 
y=this._y;
    
this.onEnterFrame=function() 
        {
        
t0++;
        var 
t=t0/3;
        
this.xs=v*(t)*Math.cos(alpha);
        
this._x=this.xs+x;
        
this.ys=-(g/2)*Math.pow(t,2)+v*t*Math.sin(alpha);
        
this._y=y-this.ys;
        };
    };
var 
alpha=_root.dolfin._x;
var 
xpos=_root.dolfin._x;
var 
KeyControl=function()
    {    
    
this.onEnterFrame=function()
        {
        if (
Key.isDown(Key.LEFT)) 
            {
            
alpha--;
            
_root.dolfin._x=alpha;
            
_root.angle.text=-(alpha-xpos);
            }
        if (
Key.isDown(Key.RIGHT)) 
            {
            
alpha++;
            
_root.dolfin._x=alpha;
            
_root.angle.text=-(alpha-xpos);
            }
        if (
Key.isDown(Key.SPACE)) 
            {
            
delete this.onEnterFrame;
            var 
impulse=function()
                {
                if(
v0<100)
                    {
                    
v0=v0+5;
                    
_root.impindicator._xscale=v0;
                    }
                }
            var 
impulseInt=setInterval(impulse,10);
            var 
Up=new Object();
            
Up.onKeyUp=function()
                {
                
clearInterval(impulseInt);
                
_root.dolfin.launch(90,v0-(v0/5));
                
launcher();
                
key.removeListener(Up);
                }        
            
Key.addListener(Up);
            }
        }
    }
var 
launcher=function()
    {
    
this.onEnterFrame=function()
        {
        if(
_root.dolfin.hitTest(_root.ball))
            {
            
_root.ball.launch((alpha-xpos)+90,v0+20);
            }
        if(
_root.ball.hitTest(_root.target))
            {
            
score=score+100;
            
_root.points.text=score;
            }                
        }
    }
KeyControl();
this.stop(); 

Liebe Grüße

Yves
  Mit Zitat antworten
Alt 01-09-2004, 20:51   #2 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
Hi.

Wo ist denn da genau die Schwierigkeit?
Den Ball hast Du ja manuell auf die Bühne gelegt.
Das würde ich schon mal per Skript machen.
Auch den Delphin würde ich per Skript plazieren.

Nachdem der Ball abgeschossen wurde, bzw. der
Delphin gesprungen ist, lässt Du die Plazierung von Ball
und Delphin wieder vornehmen.
Das kann z.B. nach einem best. Zeitablauf passieren.
Mit einem setInterval(plazierung,4000);
Hier z.B. nach 4 Sekunden.
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 01-09-2004, 20:55   #3 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Hi,

das Problem ist, das ich zb nach 4000ms bei einer replatzierung mittels Script noch einen onEnterFrame Handler laufen habe, der die Elemente direkt wieder bewegt.

Warte einen kurzen Augenblick, ich überarbeite das gerade und poste dann ein neues Script.


Übrigens schön, das man dich abends immer hier antrifft

Liebe Grüße

Yves
  Mit Zitat antworten
Alt 01-09-2004, 21:52   #4 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Hi John,

jetzt klappt es. Hab das mal vernünftig in Funktionen geschrieben und die Handler eindeutig identifiziert.

Ich überlege nun, ob ich den Reset nach dem Abschuss wirklich zeitabhängig oder besser doch Koordinatenabhängig machen soll.

Quasi sobald der Ball das Bild nach unten hin verlässt ODER 10sekunden um sind, einen reset.

PHP-Code:
//Actionscript 1.0
var startBall_x=_root.ball._x;
var 
startBall_y=_root.ball._y;
var 
startDolfin_x=_root.dolfin._x;
var 
startDolfin_y=_root.dolfin._y;
_root.points.text=0;

_global.reset=function()
    {
    
clearInterval(_global.resetInt);
    
delete _root.ball.onEnterFrame;
    
delete _root.dolfin.onEnterFrame;
    
_root.ball._x=startBall_x;
    
_root.ball._y=startBall_y;
    
_root.dolfin._x=startDolfin_x;
    
_root.dolfin._y=startDolfin_y;
    
_root.impulseIndicator._xscale=0;
    
_global.v0=0;
    
_root.points.text=0;
    
Key.addListener(SpaceDwn);
    
_global.monitoring();
    };
    
var 
timelimit=120;
_root.time.text=timelimit;
var 
increaseTime=function()
    {
    if(
timelimit>0)
        {        
        
timelimit--;
        
_root.time.text=timelimit;
        }
    else
        {
        
clearInterval(timer);
        }
    };
var 
timer=setInterval(increaseTime,1000);

MovieClip.prototype.launch=function(alpha0,v0
    {
    var 
t0=0;
    var 
v=v0;
    var 
alpha=alpha0*Math.PI/180;
    var 
g=9.81;
    var 
x=this._x;
    var 
y=this._y;
    
this.onEnterFrame=function() 
        {
        
t0++;
        var 
t=t0/3;
        
this.xs=v*(t)*Math.cos(alpha);
        
this._x=this.xs+x;
        
this.ys=-(g/2)*Math.pow(t,2)+v*t*Math.sin(alpha);
        
this._y=y-this.ys;
        };
    };
    
var 
impulse=function()
    {
    if(
_global.v0<100)
        {
        
_global.v0=_global.v0+5;
        
_root.impulseIndicator._xscale=_global.v0;
        }
    };

    
var 
SpaceDwn=new Object();
var 
SpaceUp=new Object();
SpaceDwn.onKeyDown=function() 
    {
    if (
Key.isDown(Key.SPACE)) 
        {        
        
_global.impulseInt=setInterval(impulse,10);
        
Key.removeListener(SpaceDwn);
        
Key.addListener(SpaceUp);
        }
    };
SpaceUp.onKeyUp=function() 
    {
    
clearInterval(_global.impulseInt);
    
_root.dolfin.launch(90,_global.v0-(v0/5));
    
Key.removeListener(SpaceUp);    
    };    
Key.addListener(SpaceDwn);    
    
    


_global.monitoring=function()
    {
    
_global.alpha=_root.dolfin._x;
    
_global.xpos=_root.dolfin._x;
    
_root.angle.text=0;
    
_root.onEnterFrame=function()
        {
        if (
Key.isDown(Key.LEFT)) 
            {
            
_global.alpha--;
            
_root.dolfin._x=_global.alpha;
            
_root.angle.text=-(_global.alpha-_global.xpos);
            }
        if (
Key.isDown(Key.RIGHT)) 
            {
            
_global.alpha++;
            
_root.dolfin._x=_global.alpha;
            
_root.angle.text=-(_global.alpha-_global.xpos);
            }        
        if(
_root.dolfin.hitTest(_root.ball))
            {
            
delete _root.onEnterFrame;
            
_root.ball.launch((_global.alpha-_global.xpos)+90,_global.v0+20);
            
_global.resetInt=setInterval(_global.reset,10000);                
            }
        };
    };
_global.monitoring();
this.stop(); 
Liebe Grüße

Yves
  Mit Zitat antworten
Alt 01-09-2004, 21:56   #5 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
Schön, dass es jetzt klappt.

Ich würde es Koordinaten-abhängig machen.
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 01-09-2004, 21:57   #6 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Ich kann zwar den Delphin bewegen, aber den Ball nicht abschießen... sollte das schon gehen?
__________________
RTFM
Wie man Fragen richtig stellt.

Achim Bindannmalweg

Money makes the world go round, fear makes it turn much faster.
(New Model Army)
sonar ist offline   Mit Zitat antworten
Alt 01-09-2004, 22:02   #7 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Hi zusammen,

@John(?) Danke das du dir so meine Dinge immer mal mit anschaust.

@Sonar

Du musst vorher in die swf klicken. Ansonsten sag mal welchen Browser, OS, Flashplayer Version du hast.

Hab jetzt die Änderungen uploaded.

Ich bastel eben die Koordinatenabfrage

Liebe Grüße

Yves
  Mit Zitat antworten
Alt 01-09-2004, 22:14   #8 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Aaah, tatsächlich, das mit dem Klicken war's... hab mich nur gewundert, weil die Pfeiltasten gingen und die Spacetaste nicht... aber jetzt passt's schon.

(is dein Nick eigentlich auf den Green Day Song bezogen...?)
__________________
RTFM
Wie man Fragen richtig stellt.

Achim Bindannmalweg

Money makes the world go round, fear makes it turn much faster.
(New Model Army)
sonar ist offline   Mit Zitat antworten
Alt 01-09-2004, 22:20   #9 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Jaaaaaa… endlich versteht es mal einer!!! 409 Your Coffeemaker… auf der „Live at Radio Orange“!!!

  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 06:12 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele