Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 17-02-2004, 15:57   #1 (permalink)
MiB
Neuer User
 
Registriert seit: Jun 2002
Ort: P´dorf
Beiträge: 12
Hittest funkt nur auf level0 bei 100%

Hallo

Hab ein kleines Heli-Game gebastelt.
Eine Landschaft, Blick von oben, über if-abfragen (Cursertasten) läst sich der der Heli-Mc über die Landschaft steuern und über zwei Tasten kann man mit den Heli aufsteigen bzw landen.

Durch das Aufsteigen in verschiedene Höhen kann man über 5 verschiedene Hindernissearten „fliegen“ sprich
(höhe =1) hittest (boden) true
(höhe =2) hittest (Runway) true
(höhe =3) hittest (Häuser) true
(höhe =4) hittest (Stromleitungen ect.) true
(höhe =5) hittest (Wolken) true

ActionScript:
  1. if (!_root.boden.hitTest(_x+movex, _y+movey, true) && _root.hig == 1 ) {
  2.     _x += speed;
  3.         _y += speed;
  4.     }else if (!_root.Runway.hitTest(_x+movex, _y+movey, true) && _root.hig == 2 ) { 
  5. _x += speed;
  6.         _y += speed;
  7.     }
  8. ect...
soweit so gut

bei normaler Größe - 900 x 700pix auf level0 funktioniert auch alles bestens

nur ist die Spielfläche zu klein

und wenn ich den ganzen Film z.b. 4x so groß mach 1800 x 1400
und in level1 lade bei einer Bühnengröße 900 x700
und den ganzen level1 per AS verschiebe
(nicht Stufenlos, sondern „ruckartig“ also wenn der Heli rechts aus dem Bild fliegt versetzt sich der ganze level1 und eine Breite nach links und der heli fliegt von links wieder über die Bühne) funktionieren fast – nur die hittests nicht.

Der gleich Film 1800x1400 pix auf level0 funktioniert einwandfrei, is nur zu groß für die meisten Monitore.




Das Spiel auf level0 900x700
http://www.heli-ski.at/

Das Spiel mit den gleichen "hittests" auf level0, (level0 = 900x700, level1 2500 x 2100 pix)
http://www.heli-ski.at/test




Komm einfach nicht drauf, hab schon das Forum durchsucht aber nichts gefunden.
MiB ist offline   Mit Zitat antworten
Alt 17-02-2004, 23:55   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
ich sehe ja nur diesen teil deines scriptes.
schon mal drann gedacht, das du nur einen teil verschiebst und deshalb der nullpunkt eines mc's nicht mehr auf dem nullpunkt der anderen mc's übereinstimmen kann?
umwandlung mit "localToGlobal"
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 18-02-2004, 10:37   #3 (permalink)
MiB
Neuer User
 
Registriert seit: Jun 2002
Ort: P´dorf
Beiträge: 12
also hier alles

erster Frame Zeitleiste
ActionScript:
  1. hig = 1;
  2. run = 0;
  3. scale = 100;

AS am Heli MC:

ActionScript:
  1. onClipEvent (load) {
  2.     scale = 100;
  3. }
  4. onClipEvent (enterFrame) {
  5. // vergrößert den Heli
  6.     dx = (_root.scale-this._xscale)/9;
  7.     this._xscale = this._xscale+dx;
  8.     d2x = (_root.scale-this._yscale)/9;
  9.     this._yscale = this._yscale+d2x;
  10. //Vorwärtsbewegung
  11.     if (Key.isDown(Key.UP)) {
  12.         speed2 += 2;
  13.     }
  14.     if (Key.isDown(Key.UP) && Key.isDown(68)) {
  15.         speed2 += 7;
  16.     }
  17.     if (Key.isDown(Key.DOWN) && !Key.isDown(83)) {
  18.         speed2 -= 2;
  19.     }
  20.     if (Key.isDown(Key.DOWN) && Key.isDown(83)) {
  21.         speed2 -= 0.1;
  22.     }
  23.     if (Math.abs(speed2)>20) {
  24.         speed2 *= .9;
  25.     }
  26. //Rotation
  27.     if (Key.isDown(Key.LEFT) && Key.isDown(Key.UP) && _root.run == 1) {
  28.         _rotation -= 3;
  29.         x2 = 0;
  30.         y2 = 0;
  31.         x3 = 0;
  32.         y3 = 0;
  33.     }
  34.     if (Key.isDown(Key.RIGHT) && Key.isDown(Key.UP) && _root.run == 1) {
  35.         _rotation += 3;
  36.         x2 = 0;
  37.         y2 = 0;
  38.         x3 = 0;
  39.         y3 = 0;
  40.     }
  41.     if (!Key.isDown(Key.LEFT) && !Key.isDown(Key.SPACE) && !Key.isDown(Key.UP)) {
  42.         x2 = 0;
  43.         y2 = 0;
  44.         x3 = 0;
  45.         y3 = 0;
  46.     }
  47.     if (!Key.isDown(Key.RIGHT) && !Key.isDown(Key.SPACE) && !Key.isDown(Key.UP)) {
  48.         x2 = 0;
  49.         y2 = 0;
  50.         x3 = 0;
  51.         y3 = 0;
  52.     }
  53.     speed2 *= .4;
  54. //auswertung Geschwindigkeit und Rotation
  55.     x = Math.sin(_rotation*(Math.PI/180))*speed2;
  56.     y = Math.cos(_rotation*(Math.PI/180))*speed2*-1;
  57.     movex = (x);
  58.     movey = (y);
  59. //hittests 
  60.     if (!_root.land.hitTest(_x+movex, _y+movey, true) && _root.hig == 0 && _root.run == 0) {
  61.         _x += speed2=0;
  62.         _y += speed2=0;
  63.     } else if (!_root.boden.hitTest(_x+movex, _y+movey, true) && _root.hig == 0 && _root.run == 1) {
  64.         _x += speed2=0;
  65.         _y += speed2=0;
  66.     } else if (!_root.patss.hitTest(_x+movex, _y+movey, true) && _root.hig == 0 && _root.run == 1) {
  67.         _x += speed2=0;
  68.         _y += speed2=0;
  69.     } else if (!_root.boden.hitTest(_x+movex, _y+movey, true) && _root.hig == 1 && _root.run == 1) {
  70.         _x += movex;
  71.         _y += movey;
  72.     } else if (!_root.hindernisse.hitTest(_x+movex, _y+movey, true) && _root.hig == 2 && _root.run == 1) {
  73.         _x += movex;
  74.         _y += movey;
  75.         iw = "";
  76.     } else if (!_root.wolken.hitTest(_x+movex, _y+movey, true) && _root.hig == 3 && _root.run == 1) {
  77.         _x += movex;
  78.         _y += movey;
  79.     } else if (!_root.himmel.hitTest(_x+movex, _y+movey, true) && _root.hig == 4 && _root.run == 1) {
  80.         _x += movex;
  81.         _y += movey;
  82.     } else {
  83.         speed2 *= -0.06;
  84.     }
  85. }
  86. //verschieben des ganzen level1
  87. //nach rechts
  88. onClipEvent (enterFrame) {
  89.     if (this._x>900 && (_level1._x == 0)) {
  90.         _level1._x = -800;
  91.     }
  92.     if ((this._x>1600) && (_level1._x == -800)) {
  93.         _level1._x = -1600;
  94.     }
  95.     if (this._x>2480) {
  96.         this._x = 2480;
  97.     }
  98. //nach links
  99.     if (this._x<1600 && (_level1._x == -1600)) {
  100.         _level1._x = -800;
  101.     }
  102.     if (this._x<900 && (_level1._x == -800)) {
  103.         _level1._x = 0;
  104.     }
  105.     if (this._x<20) {
  106.         this._x = 20;
  107.     }
  108. //nach oben
  109.     if (this._y>680) {
  110.         _level1._y = -700;
  111.     }
  112.     if (this._y>1400) {
  113.         _level1._y = -1400;
  114.     }
  115.     if (this._y>2080) {
  116.         this._y = 2080;
  117.     }
  118. //nach unten
  119.     if (this._y<1400) {
  120.         _level1._y = -700;
  121.     }
  122.     if (this._y<700) {
  123.         _level1._y = 0;
  124.     }
  125.     if (this._y<20) {
  126.         this._y = 20;
  127.     }
  128. }


MC für aufsteigen und landen Höhen abfragen
ActionScript:
  1. onClipEvent (enterFrame) {
  2.     _root.regler.hohe = 0;
  3.     wtw = Math.round(_root.regler.hohe+ww);
  4.     _root.regler.hohe = wtw;
  5.     if (Key.isDown(69) && (_root.run == 1) && _root.regler.hohe<=3.9) {
  6.         ww += 0.08;
  7.     }
  8.     if (Key.isDown(87) && _root.regler.hohe>=0.1) {
  9.         ww -= 0.08;
  10.     } else if (_root.regler.hohe<3.9 && !Key.isDown(69)) {
  11.         ww -= 0;
  12.     } else if (_root.regler.hohe>0.1 && !Key.isDown(87)) {
  13.         ww -= 0;
  14.     }
  15.     regl2 = wtw;
  16.     _root.hig = regl2;
  17.     regl = Math.round(_root.regler.hohe+ww);
  18.     _root.scale = 100+(regl*10);
  19. }

und noch die filme für die hittests.

das is eigentlich alles.

wenn man den film in level1 läd verschiebt sich der hittest mit der günen fläche von links unten (optisch bleibt die fläche auch dort) nach links mitte ( unsicht bar )???

und das is eigentlich das problem

hier mal die ganze fläche zur ansicht
http://www.heli-ski.at/test2/

die fläche auf level1
http://www.heli-ski.at/test/
MiB ist offline   Mit Zitat antworten
Alt 19-02-2004, 00:32   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
Also so ganz kapiere ich dein problem nicht!!!!
deshalb ist diese antwort auch eventuell falsch.
----------

"..ich sehe ja nur diesen teil deines scriptes.."
da hatte ich mehr an den hierarchischen aufbau gedacht.
hatte jetzt nicht vor, deinen spagetti-code zu frühstücken ;-)


"..wenn man den film in level1 läd verschiebt sich der hittest mit der günen fläche von links unten (optisch bleibt die fläche auch dort) nach links mitte (unsicht bar)???.."

A)
also hittest ist eine funktion, die kann man nicht verschieben?!

B)
wenn du ein mc in ein anderes läds und beide sind gleich gross. dann passen die zueinander. ist irgendwie klar, oder? mach dein in _level1 geladenes mc so gross wie den hauptfilm.
andernfalls klebt das 900x700 grosse rechteck links oben im 2500x2100 grossen rechteck. weil rechts oben der nullpunkt ist: x=0 und y=0 (links oben!!! nicht links mitte?). ist auch irgendwie klar, oder? in diesem fall musst du _x und _y positionieren. hat überhaupt nichts mit hittest zu tun.

z.b.:
1.frame
loadMovieNum ("xxx.swf", 1);

3.frame
if (_level1._framesloaded>=_level1._totalframes) {
_level1._y = 2100-700;
stop ();
} else {
prevFrame();
play();
}

C)
unsichtbar??? der geladene mc ist transparent, meinst du das?

D)
falls du nach dem verschieben von _level1 die funktion hittest auf objekte in _level0 ausführen willst, dann denk an die verschiebung und benütze z.b. die funktion LocalToGlobal.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (19-02-2004 um 00:34 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 19-02-2004, 09:14   #5 (permalink)
MiB
Neuer User
 
Registriert seit: Jun 2002
Ort: P´dorf
Beiträge: 12
Stimmt, hab das nicht deutlich genug erklärt.

alsden...

@A – weis ich, nur ein Hittest muss zwischen zwei filmen passieren, am besten man sieht (geht aber auch mit _alpha = 0) beide.

Nur hier
http://www.heli-ski.at/test/

Passiert folgendes:
der hittest sollte zwischen Heli und der grünen Fläche sein,
Nur wenn man am Anfang die grüne Fläche sieht tut sich NIX
und wenn man mit dem Heli aber einfach nach oben fliegt( aus dem bild raus)
und sich der der level1 verschiebt bleibt der heli stehn – weil ein hittest (da is aber im film NIX)
mit geduld und zeit kann man aber die „kannte“ abfliegen, und es is die gleiche Form wie die grüne Flache ( die jetzt aber schon nach unten verschoben wurde?

@B Ich lade einen großen Film (B2500xH200 level1) in einen kleinen (B900xH700 level0)

@C erklärt sich in A das ein film der in ein höheren level geladen wird durchsicht bar wird is auch bekannt, das unsichtbar bezieht sich auf das Feld „mitte links“ wo der Heli stehen bleibt obwohl da nix is

@D alle hittest werden im selben level ausgeführt,
wird der spiel-swf (2500x2100) auf level0 geladen funktionieren alle hitests,
ladet man den selben swf auf level1 in einem kleinerem swf funktionieren die hitests nicht mehr??
MiB ist offline   Mit Zitat antworten
Alt 20-02-2004, 08:47   #6 (permalink)
MiB
Neuer User
 
Registriert seit: Jun 2002
Ort: P´dorf
Beiträge: 12
Hat wirklich keine eine Ahnung????

oder ab ich's zu schlecht beschrieben???

stell mal ein screenshot rein
vielleicht hat dann wer den durchblick

http://www.heli-ski.at/sp.jpg

buh (bitte um hilfe) m.
MiB 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 16:20 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele