Flashhilfe.de - Flash Community

Scrolling Methode gesucht ... [Flash 8]

 


AntwortenRegistrieren Seite1  

webmaster_shorty#1
Benutzerbild von webmaster_shorty
Beiträge: 9
Wohnort: Bremen
Registriert: Sep 2005

16.07.2011, 18:36

Hallo Liebe Flashgemeinde!

Ich möchte für ein kleines game ein simples scrolling coden. Und zwar möchte ich das das Bild was ich per
ActionScript:
1
2
3
on(release){
  bg.loadMovie("src/bgtexture_3_dark.gif");
}

in den platzhalter bg lade (oder mit on(enterFrame) ) bei einer bestimmten Koordinate anfängt sich an eine neue Position zu verschieben. Sagen wir mal wenn sich der "Avatar" an den Kanten (50px) des 640x480 grosses bildschirms aufhält soll das Bild in die richtige richtung scrollen ...

Bin über jeden sinnvollen Beitrag dankbar ...
Gruss
gentoo rules
Werbung
Beiträge: 0
Registriert: Feb 2016


ashitaka#2
Benutzerbild von ashitaka
Beiträge: 161
Registriert: Apr 2010

17.07.2011, 11:03

so ein spiel zu programmieren ist nicht so trivial,
vor allem wenn man es halbwegs vernünftig machen will.

trotzdem mal ein kleiner denkanstoß:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var curScreen = 0; // Nummer des aktuellen screens
var SCREEN_WIDTH = 640;

this.onEnterFrame = gameLoop;

function gameLoop() { // gameLoop wird jeden Frame aufgerufen
     if (avatar._x < 50) {  // avatar geht links zum neuen Screen
        switchToScreen(curScreen-1);
      } else if (avatar._x > SCREEN_WIDTH-50) { // avatar geht rechts zum neuen Screen
         switchToScreen(curScreen+1);
      }
}

function switchToScreen(sId) {
     var bgEndX = sId < curScreen ? bg._x+SCREEN_WIDTH : bg.x - SCREEN_WIDTH; // neue _x-position des Hintergrunds ermitteln
    var bgTween:Tween = new Tween (bg,"_x",Strong.easeOut,b._x,bgEndX ,2,true); // hintergrund bewegen

     var avEndX = sId < curScreen ? 50 : SCREEN_WIDTH // neue x-position des avatars ermitteln
    var avatarTween:Tween = new Tween (avatar,"_x",Strong.easeOut,avatar._x,avEndX ,2,true); // avatar bewegen

     curScreen = sId; // currentScreen updaten, also merken, welcher der aktuelle Screen ist
}




Nicht getestet, aber so in etwas müsste es funktionieren.
Was noch fehlt ist, den jeweils neuen Hintergrund zu laden und richtig zu positionieren.
Hier gibt es auch unterschiedliche lösungsansätze.
Z.b. könntest du einfach alle Hintergründe in "bg" reinsetzen, jeweils an der richtigen Position.
D.h. bg wäre dann der container für alle Hintergrundbilder.
Zeitleisten-Programmierung ist böse! löst euch von der Zeitleiste -> benutzt Flashdevelop!
Antworten auf Flash AS3 Fragen.
Flash Programmierer
Geändert von ashitaka am 17.07.11 um 11:09 Uhr
webmaster_shorty#3
Benutzerbild von webmaster_shorty
Beiträge: 9
Wohnort: Bremen
Registriert: Sep 2005

Themenautor/in

17.07.2011, 11:25

Dankeschön für diesen Tip !

Wie kann ich mich erkenntlich zeigen?

bisher habe ich damit auf dem MC bg gearbeitet:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
onClipEvent (enterFrame) {      
     Xsquare = _root.bg._x;
     Xdiff = Xpos-Xsquare;
     Xmove = Xdiff/10;
     _root.bg._x = Xsquare+Xmove;
     
     Ysquare = _root.bg._y;
     Ydiff = Ypos-Ysquare;
     Ymove = Ydiff/10;
     _root.bg._Y = Ysquare+Ymove;
     updateAfterEvent(enterFrame);
}


Gruss
gentoo rules
Geändert von webmaster_shorty am 17.07.11 um 12:04 Uhr
webmaster_shorty#4
Benutzerbild von webmaster_shorty
Beiträge: 9
Wohnort: Bremen
Registriert: Sep 2005

Themenautor/in

19.07.2011, 01:33

Hallali!

wg. scrolling

habe das script auf einen MC mit onClipEvent(enterFrame){***} "eingebettet"
dabei gibt flash mir folgendes 1x aus:

**Error** Symbol=Tween, layer=Layer 1, frame=1:Line 1: The class or interface 'Tween' could not be loaded.

habe natürlich vorher dafür gesorgt das das an AS 2.0 class als Tween verknüpft ist...
und ausserdem
ActionScript:
1
2
import mx.transitions.Tween;
import mx.transitions.easing.*;

an den anfang geschrieben ..

habe bisher noch nix mit mx.transitions und easeOut (langsam abbremsen) gemacht...

Gruss
Shorty
gentoo rules
Werbung
Beiträge: 0
Registriert: Feb 2016


ashitaka#5
Benutzerbild von ashitaka
Beiträge: 161
Registriert: Apr 2010

19.07.2011, 08:03

also bei mir klappts.
hatte noch ein paar andere kleine bugs im script, aber mit dem Tweenen gabs keine Probleme:

steuern mit pfeiltasten!

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
37
38
39
import mx.transitions.Tween;
import mx.transitions.easing.*;


var curScreen = 0; // Nummer des aktuellen screens
var SCREEN_WIDTH = 640;

this.onEnterFrame = gameLoop;

function gameLoop() { // gameLoop wird jeden Frame aufgerufen
   if (Key.isDown(Key.LEFT)){
        avatar._x -= 10;
     } else if (Key.isDown(Key.RIGHT)){
        avatar._x += 10;
     } 
 
 
 
       if (avatar._x < 50) {  // avatar geht links zum neuen Screen
        switchToScreen(curScreen-1);
        } else if (avatar._x > SCREEN_WIDTH-50) { // avatar geht rechts zum neuen Screen
         switchToScreen(curScreen+1);
        }
}

function switchToScreen(sId) {
     trace("switchToScreen "+ sId);
       var bgEndX = sId < curScreen ? bg._x+SCREEN_WIDTH : bg._x - SCREEN_WIDTH; // neue _x-position des Hintergrunds ermitteln
trace("bgEndX "+ bgEndX);
  var bgTween:Tween = new Tween (bg,"_x",Strong.easeOut,bg._x, bgEndX ,2,true); // hintergrund bewegen

       var avEndX = sId < curScreen ?  SCREEN_WIDTH-50 : 50 ;// neue x-position des avatars ermitteln
    var avatarTween:Tween = new Tween (avatar,"_x",Strong.easeOut,avatar._x,avEndX ,2,true); // avatar bewegen

       curScreen = sId; // currentScreen updaten, also merken, welcher der aktuelle Screen ist
}



Zeitleisten-Programmierung ist böse! löst euch von der Zeitleiste -> benutzt Flashdevelop!
Antworten auf Flash AS3 Fragen.
Flash Programmierer


Angehängte Dateien:
Adobe Flash Quelldatei gamscroll.fla8.35 KB
Adobe Flash Animationen gamscroll.swf3.24 KB
Geändert von ashitaka am 19.07.11 um 08:04 Uhr
webmaster_shorty#6
Benutzerbild von webmaster_shorty
Beiträge: 9
Wohnort: Bremen
Registriert: Sep 2005

Themenautor/in

19.07.2011, 14:37

Danke!

funzt das auch mit flash 8? (kann die fla nicht öffnen)

hast mir aber schon damit weitergeholfen ...
gentoo rules
Geändert von webmaster_shorty am 19.07.11 um 17:09 Uhr
ashitaka#7
Benutzerbild von ashitaka
Beiträge: 161
Registriert: Apr 2010

19.07.2011, 17:55

flash8 ... was ist das in CS... sprache?
ich kann es aus CS5 scheinbar minimal asls CS4 esportieren ... kann das sein?
Zeitleisten-Programmierung ist böse! löst euch von der Zeitleiste -> benutzt Flashdevelop!
Antworten auf Flash AS3 Fragen.
Flash Programmierer
vindel#8
Benutzerbild von vindelFlashhilfe.de Moderator
Beiträge: 3000
Wohnort: Köln
Registriert: Oct 2007

20.07.2011, 00:20

So sieht die "letzte" Entwickling von Flash aus:
- MX
- MX2004
- Flash 8
- Flash 9 / CS3
- Flash 10 / CS4
- CS5
Es ist immer nur um eine Version abwärskompatibel!
@webmaster_shorty - häng doch sonst mal deine Datei an, dann kann man die öffnen und sehen was da nicht klappt!
public Weltformel(Problem){
      if (Problem gelöst) return Lösung;
      else Weltformel(kleiners Problem);
}
Geändert von vindel am 20.07.11 um 00:21 Uhr
webmaster_shorty#9
Benutzerbild von webmaster_shorty
Beiträge: 9
Wohnort: Bremen
Registriert: Sep 2005

Themenautor/in

20.07.2011, 12:52

hier sind die files ...

bitte das bg1.gif in ordner src verschieben

Gruss
Shorty
gentoo rules

Angehängte Dateien:
Bild bg1.gif227.50 KB
Adobe Flash Quelldatei se.fla40.00 KB
Adobe Flash Animationen se.swf3.79 KB
ashitaka#10
Benutzerbild von ashitaka
Beiträge: 161
Registriert: Apr 2010

20.07.2011, 13:31

Du solltest deinen code nicht in irgendwelche unsichtbaren Objekte auf der Bühne legen,
sondern am besten alles in die Hauptzeitleiste im ersten Frame.
Wenn du den Code gliedern willst, schlage ich vor, für jeden Codeblock eine Ebene anzulegen.
Sollten natürlich nicht zu viele werden.

z.b. anstatt das auf den avatar zu legen:
ActionScript:
1
2
3
4
onClipEvent(enterFrame) {
  _rotation=180+(Math.atan2(_y-_root._ymouse,_x-_root._xmouse)*360/2/Math.PI)
  _root.ausgabe="X: "+_root._xmouse+" ,Y: "+_root._ymouse;
};


mach dir ne ebene in der hauptzeitleiste, die du avatar nennst:
ActionScript:
1
2
3
4
avatar.onEnterFrame = function() {
     this._rotation=180+(Math.atan2(this._y-_root._ymouse,this._x-_root._xmouse)*360/2/Math.PI)
     this._root.ausgabe="X: "+_root._xmouse+" ,Y: "+_root._ymouse;
}


der code von mir gehört auch in die Hauptzeitleiste, und nicht in ein "onClipEvent(enterFrame){" eingepackt.
Zeitleisten-Programmierung ist böse! löst euch von der Zeitleiste -> benutzt Flashdevelop!
Antworten auf Flash AS3 Fragen.
Flash Programmierer
Geändert von ashitaka am 20.07.11 um 13:33 Uhr
webmaster_shorty#11
Benutzerbild von webmaster_shorty
Beiträge: 9
Wohnort: Bremen
Registriert: Sep 2005

Themenautor/in

20.07.2011, 16:17

ok - danke sehr !! funktioniert alles!!

habe in meinem nichtveröffentlichen fla schon 24 ebenen ...
die uploaded files habe ich nur mal ebenso "zusammengefriemelt"
gentoo rules
Geändert von webmaster_shorty am 23.07.11 um 17:22 Uhr
webmaster_shorty#12
Benutzerbild von webmaster_shorty
Beiträge: 9
Wohnort: Bremen
Registriert: Sep 2005

Themenautor/in

25.07.2011, 15:12

Hallo!

Wie kann man das ganze noch auf die y-achse anwenden ohne grossartig doppelten code zu fabrizieren ? Mir fehlt ein wenig das mathematische verständnis ...
gentoo rules

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   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2019 Sebastian Wichmann - Flashhilfe.de