Flashhilfe.de - Flash Community

Problem bei Bewegungsablauf/Scripting [Flash 9]

 


AntwortenRegistrieren Seite1  

x-LFPx#1
Benutzerbild von x-LFPx
Beiträge: 4
Registriert: Mar 2011

31.03.2011, 18:24

Hallo zusammen,
ich habe ein Problem mit einem Spiel, das ich zur Zeit Programmiere...
(der Aufbau des Spiels/.fla-Datei ist dabei unwichtig)

Das Problem sieht folgendermaßen aus:
Ich habe ein Objekt, welches sich hin und her bewegen soll...
Diese Bewegung soll ewig andauern, also nicht nur einmal stattfinden.
Der Movieclip soll sich also von rechts nach links und von links nach rechts bewegen...
Ich hab schon einige Codes ausprobiert...aber irgendwie funktioniert es nich!
Zu Beispiel:
ActionScript:
1
2
3
4
5
6
7
8
9
10
/*>bewegender< ist der Movieclip, der sich bewegen soll
>wand< ist ein Versuch, die Bewegung nach einr >hitTest< Abfrage
bedingt abspielen zu lassen...hat aber alles nich geklappt...
*/

while (this.bewegender.hitTest(wand) == false ){
  meineIntervalID = setInterval(meineFunktion, 10);
  function meineFunktion() {
     this.bewegender._x += 1;
  }
}

irgendwie weis ich nich weiter...was mach ich falsch, bzw. wie soll ich das machen?
Ich hoffe ihr könnt mir da helfen...danke im Voraus.
Geändert von x-LFPx am 31.03.11 um 18:25 Uhr
Sleepingbeast#2
Benutzerbild von Sleepingbeast
Beiträge: 579
Wohnort: Halle
Registriert: Apr 2005

31.03.2011, 19:04

Hallo,

ich bin mir ziemlich sicher, dass deine Funktion nicht funktionieren kann ;) Vermutlich hängt sich Flash sogar während des Ausführens auf (wegen der while-Schleife).

Ich hab dir mal schnell was zusammengeschustert, vielleicht bringt dich das auf die richtige Spur:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
var bewegeNachLinksIntervall:Number;
var bewegeNachRechtsIntervall:Number;
var geschwindigkeit:Number = 5;

function bewegeNachLinks()
{
     if(kreis_mc._x > kreis_mc._width / 2)
     {
        kreis_mc._x--;
     }
     else
     {
        clearInterval(bewegeNachLinksIntervall);
        bewegeNachRechtsIntervall = setInterval(bewegeNachRechts, geschwindigkeit);
     }
}

function bewegeNachRechts()
{
     if(kreis_mc._x < Stage.width - kreis_mc._width / 2)
     {
        kreis_mc._x++;
     }
     else
     {
        clearInterval(bewegeNachRechtsIntervall);
        bewegeNachRechtsIntervall = setInterval(bewegeNachLinks, geschwindigkeit);
     }
}

function init()
{
     bewegeNachLinksIntervall = setInterval(bewegeNachLinks, geschwindigkeit);
}

init();


Der sich bewegende MovieClip hat den Instanznamen kreis_mc und bewegt sich in meinem Script zwischen den beiden Rändern des Flashfilms hin und her.

Liebe Grüße
Patrick
_________________________________________________________
Um Rekursion wirklich zu verstehen, muss man zuerst Rekursion verstehen.
null != 'null' != 0 != '0'


Angehängte Dateien:
Adobe Flash Animationen bewegung.swf0.85 KB
Geändert von Sleepingbeast am 31.03.11 um 19:06 Uhr
x-LFPx#3
Benutzerbild von x-LFPx
Beiträge: 4
Registriert: Mar 2011

Themenautor/in

01.04.2011, 18:14

Ahh, danke!
das wird mir wohl weiterhelfen!
RustyCake#4
Benutzerbild von RustyCake
Beiträge: 1776
Wohnort: Laimbach 6 1/2
Registriert: Nov 2002

01.04.2011, 19:51

Servus
Nicht böse sein, aber das geht einfacher.
TWEENER ;-)
ActionScript:
1
2
3
4
5
6
7
8
9
10
import com.caurina.transitions.*;
var speed:Number = 1;
var mc:MovieClip = this.kreis_mc;
function first() {
       Tweener.addTween(mc, {_x:(Stage.width - mc._width / 2), time:speed, transition:"linear", onComplete:second});
}
function second() {
       Tweener.addTween(mc, {_x:(mc._width / 2), time:speed, transition:"linear", onComplete:first});
}
first();
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muss erst gehen lernen"
x-LFPx#5
Benutzerbild von x-LFPx
Beiträge: 4
Registriert: Mar 2011

Themenautor/in

02.04.2011, 09:43

Also, erstmal danke!
Ich glaub du hast die Frage gelöst!
Ein Problem hab ich noch mit deiner Lösung:

 Da du die begrenzung mit
ActionScript:
1if(kreis_mc._x < Stage.width - kreis_mc._width / 2)

gelöst hast, bekommt man logischerweise durch das
ActionScript:
1Stage.width

Probleme, wenn man maximiert oder mit Vollbildmodus arbeitet.
deshalb hab ich beide Begrenzungen mit einfachen Werten aus dem Koordinatensystem gelöst.
Das ganze sieht jetzt also so aus:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
var bewegeNachLinksIntervall:Number;
var bewegeNachRechtsIntervall:Number;
var geschwindigkeit:Number = 5;

function bewegeNachLinks()
{
       if(kreis_mc._x > 0)
       {
          kreis_mc._x--;
       }
       else
       {
          clearInterval(bewegeNachLinksIntervall);
          bewegeNachRechtsIntervall = setInterval(bewegeNachRechts, geschwindigkeit);
       }
}

function bewegeNachRechts()
{
       if(kreis_mc._x < 300)
       {
          kreis_mc._x++;
       }
       else
       {
          clearInterval(bewegeNachRechtsIntervall);
          bewegeNachRechtsIntervall = setInterval(bewegeNachLinks, geschwindigkeit);
       }
}

function init()
{
       bewegeNachLinksIntervall = setInterval(bewegeNachLinks, geschwindigkeit);
}

init();

Funktioniert wirklich!
Also danke nochmal und damit wär die Frage ja dann gelöst... Untitled-1.swf (0.60 KB)

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2022 Sebastian Wichmann - Flashhilfe.de