Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 10-08-2004, 08:43   #1 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Ort: Bern, Schweiz
Beiträge: 19
Talking Shooting Game

Erst einmal Halloo..

Ich hät da mal ne frage, was die Funktion DuplicateMovieClip() betrifft;
Jeder hat sicher schon mal so n Flashgame gespielt, wo man wild umher ballern muss

Nunja, ich weis jetzt nicht genau wie das mit dem Schiessen gemacht wird, aber da wird doch einfach ein Schuss-MC dupliziert und über den Bildschirm gejagt.. nunja, ist das wirklich so oder wie sonst?!

Nun ähm ja.. ich kenn mich noch nicht so mit dieser Funktion aus.. wie könnte man das einfach und gut machen.. damit z.B. eine Figur in alle 4 Richtungen (von oben gesehen) schiessen kann u. wenn der Schuss am Rande irgendwo auftrifft, dass er verschwindet!

Ich weis.. ich verlang da ziemlich viel, wär aber sehr froh wenn sich jemand n bisschen Zeit nehmen könnte.. es muss technisch nicht perfekt sein, nur sollte es funktionieren

Oder sonst gebt mir doch n Paar Tipps, damit ich weis, wie ich das ganze angehen kann.. wär echt super, ich weis hier gibts genug Schlaue köpfe, die sowas können


THX im Voraus..
__________________
Wenn ihr interressiert seit, besucht doch mal unsere Seite:
http://www.clan-farcry.com
ebert ist offline   Mit Zitat antworten
Alt 10-08-2004, 09:06   #2 (permalink)
glücklich
 
Registriert seit: Mar 2004
Ort: Berlin
Beiträge: 27
Hm, naja,

also damit dein Charakter in irgendeine Richtung schießen kann, sollte er erstmal in diese Richtung blicken und dann weißt du ja schon in welche Richtung du den "SchußMC" bewegen mußt. Und wenn er dann außerhalb der Bühne ist (da gibts sicher ne MC Eigenschaft in Flash), dann entlädst du den MC. Ansosnten kannst du das auch mit Kollision lösen.
Vielleicht als Denkanstoß ganz gut, oder?, mehr fällt mir jetzt so auf'n plautz nich ein...
Was denken die anderen, schon wegen der Performance?

gruß brainyartist
brainyartist ist offline   Mit Zitat antworten
Alt 10-08-2004, 12:02   #3 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Ort: Bern, Schweiz
Beiträge: 19
Unhappy

Nunja, das mit der Richtung ist nicht so das Problem.. kann ich dann ja für jede Richtung ne eigene Funktion schreiben! Um das MC zu löschen hab ich an die Funktion removeMovieClip() gedacht, hab sie allerdings noch nie verwendet

Aber das Problem ist, wie kann ich wenn überhaupt ein Dupliziertes Movieclip ansprechen und und ihm sagen, das es z.B. movieClip._x++ zählt und gleichzeitig immer wieder neuere Ansprechen, so dass das alte immer noch seinem Befehl folgt?!

So in ähnlicher Art und Weise hab ichs probiert..
PHP-Code:
while(i=1i<10i++){
MCname "schuss"+i;
duplicateMovieClip (_root.mcMCnamei);
setProperty (MCname_y, ???);

Hat da jemand ne Ahnung, das ich eben machen kann, das jedes Neu erstellte MC bis an den Bildschirmrand flitzt und dorf wieder mit removeMovieClip() entfernt wird?!

..oder gibt es allgemein ne bessere Möglichkeit? Ich kenn mich selbst nich all zu gut aus
__________________
Wenn ihr interressiert seit, besucht doch mal unsere Seite:
http://www.clan-farcry.com
ebert ist offline   Mit Zitat antworten
Alt 10-08-2004, 12:54   #4 (permalink)
Waffe==Verstand
 
Benutzerbild von p-flash
 
Registriert seit: Jul 2004
Ort: Düsseldorf
Beiträge: 724
Hi ebert,

du kannst es zB. so lösen:

Schreibe im Frame des Mcs (schuss) den du duplizieren möchtest:

PHP-Code:
    if(this._y 0) { //Wenn Schuss am oberen Rand der Bühne ist, dann...
        
this.removeMovieClip();//...entferne ihn.
    

Das machst du dann in mit allen Richtungen.

So hat automatisch jedes duplizierte Mc diese Eigenschaften.

Jedoch kann diese Methode zur schlechten Übersicht führen, da der Code im Frame des Mcs ist. Habe leider keine Zeit eine bessere Methode zu schreiben. Muss weg.

Wenn bis heute abend niemand dazu was geschrieben hat (was ich nicht glaube), lass ich mir was einfallen.

/edit
setProperty gilt als veraltet.

Die neuere Schreibweise sieht zB so aus.

PHP-Code:
for (var 55i++) {
    
duplicateMovieClip("mc""mc"+ii);
    
_root["mc"+i]._x 5;

Das hat nichts mit deinem Script zu tun. Es geht nur um die Schreibweise.

p-flash

Geändert von p-flash (10-08-2004 um 12:59 Uhr)
p-flash ist offline   Mit Zitat antworten
Alt 10-08-2004, 14:22   #5 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Ort: Bern, Schweiz
Beiträge: 19
Danke erst mals für die Lehren der Schreibweisen.. das mit dem setPoperity() fand ich sowieso irgendwie komisch ..und nun weis ich wenigstens auch schon, wie ich das mit dem Löschen machen kann.. danke schon mal für das!

Nun kommt eingetntlich nur noch der Komplizierte teil mit dem über die Bühne bewegen, bis zum Rand!
__________________
Wenn ihr interressiert seit, besucht doch mal unsere Seite:
http://www.clan-farcry.com
ebert ist offline   Mit Zitat antworten
Alt 11-08-2004, 08:48   #6 (permalink)
glücklich
 
Registriert seit: Mar 2004
Ort: Berlin
Beiträge: 27
Cool

Na so schwer ist dat doch net,

du schreibst einfach ne Schleife, die die Koordinaten des MC's ändert, also MovieClip._x, MovieClip._y Werte erhöht oder erniedrigt, je nach Richtung des Abschusses.
Oder noch besser eine Funktion pro Richtung...
Oder noch viel viel besser ein "Schuß"-Objekt mit entsprechenden Methoden...

gruß brainyartist

Geändert von brainyartist (11-08-2004 um 08:49 Uhr)
brainyartist ist offline   Mit Zitat antworten
Alt 11-08-2004, 12:15   #7 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Ort: Bern, Schweiz
Beiträge: 19
Lightbulb

Naja.. das dachte ich anfangs auch.. ich hab nur ein Problem, das ich nicht lösen kann:

Wenn ich ne funktion schreibe, die ein Movieclip duplizieren soll und genau dieses ansprechen und sagen, dass es bis ans Ende der Map fliegen soll, hab ich ein einziges Problem.. Wenn ich nun während dem ein Schuss fliegt und die Funktion diesen Anspricht, einen zweiten abfeuern will, übernimmt die Funktion den neu generierten Schuss und der andere bleibt einfach stehen weil ja die Funktion immer auf den neuen zugreift und nicht zwei oder mehrere Schüsse gleichzeitig ansprechen kann.

Ich weis, ich weis.. klingt ziemlich gestörrt was ich da erzähle. Vermutlich kann man dass nur begreiffen, wenn man selbst sowas geschrieben hat.. (Ne funktion, die auf Tastendruck ein Movieclip dupliziert und ihn ans ende des Levels fliegen lässt)

Nunja.. heeeellft mir

Ehm.. brainyartist schrieb:
...Oder noch viel viel besser ein "Schuß"-Objekt mit entsprechenden Methoden...

Was bitte ist ein Objekt? Ich weis.. vermutlich was ganz einfaches, das ich schon längst kenne oder kennen sollte. Aber hier sagt mir das jetzt nichts
__________________
Wenn ihr interressiert seit, besucht doch mal unsere Seite:
http://www.clan-farcry.com
ebert ist offline   Mit Zitat antworten
Alt 12-08-2004, 12:00   #8 (permalink)
glücklich
 
Registriert seit: Mar 2004
Ort: Berlin
Beiträge: 27
Tachen ebert,

dann wäre es vielleicht sinnvoll, wenn du den entsprechenden Code-Abschnitt hier postest, dann läßt sich leichter darüber reden.

Und zu deiner Frage was ein Objekt ist: könnte echt den Rahmen sprengen das hier zu erklären, aber wenigstens ein kleiner Einblick; Alle Symbole in Flash sind Objekte (z.B. MovieClips) und die haben bestimmte Eigenschaften (Farbe, etc), also Variablen die einen Wert speichern und Methoden (play,stop, etc), sprich Funktionen die zu dem Objekt gehören. Zusammengefasst gesagt sind Objekte eigentlich eine Gruppierung von Variablen (Eigenschaften) und Funktionen (Methoden). Objekte haben aber programmiertechnisch gesehen noch spezielle Vorteile in der Handhabung.

gruß brainyartist

P.S. Bitte liebe Leute haut micht nicht für diese lapidare Erklärung..
brainyartist ist offline   Mit Zitat antworten
Alt 12-08-2004, 13:21   #9 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Ort: Bern, Schweiz
Beiträge: 19
Gut gut.. ich weis was du meinst!

Ehm wegen dem Code.. ich werd heut schnell mal n simples .fla schreiben dann können wir weiter reden

Ah ja ehm ha da vorhin gerade was im Forum entdeckt:
Könnt ich nicht in den MC, der dupliziert werden soll das schreiben:
PHP-Code:
onClipEvent (enterFrame) { 
if (
_x>=400) { 
this.removeMovieClip(); 
}else{
_x++;
}

Dann würde sich das Teil doch von selbst entfernen?! Wär das ne gute Lösung?
__________________
Wenn ihr interressiert seit, besucht doch mal unsere Seite:
http://www.clan-farcry.com

Geändert von ebert (12-08-2004 um 13:27 Uhr) Grund: hab ne idee:
ebert ist offline   Mit Zitat antworten
Alt 12-08-2004, 13:51   #10 (permalink)
glücklich
 
Registriert seit: Mar 2004
Ort: Berlin
Beiträge: 27
Theoretisch schon, ich hatte sowas schon im Hinterkopf, trotzdem hängt das aber von dem Code ab, ob das eine gute Lösung ist, vielleicht gehts auch noch besser...

bis denne
brainyartist ist offline   Mit Zitat antworten
Alt 16-08-2004, 15:43   #11 (permalink)
Neuer User
 
Registriert seit: Apr 2004
Ort: Bern, Schweiz
Beiträge: 19
Nungut, ich werds mal mit dieser Methode ausprobieren.. wenn ich n bisschen Weiter bin, kann ich ja mal die .swf posten
__________________
Wenn ihr interressiert seit, besucht doch mal unsere Seite:
http://www.clan-farcry.com
ebert ist offline   Mit Zitat antworten
Alt 02-11-2004, 21:49   #12 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Ort: Zu Hause
Beiträge: 68
Zitat:
Zitat von ebert
Wenn ich ne funktion schreibe, die ein Movieclip duplizieren soll und genau dieses ansprechen und sagen, dass es bis ans Ende der Map fliegen soll, hab ich ein einziges Problem.. Wenn ich nun während dem ein Schuss fliegt und die Funktion diesen Anspricht, einen zweiten abfeuern will, übernimmt die Funktion den neu generierten Schuss und der andere bleibt einfach stehen weil ja die Funktion immer auf den neuen zugreift und nicht zwei oder mehrere Schüsse gleichzeitig ansprechen kann.

Ich weis, ich weis.. klingt ziemlich gestörrt was ich da erzähle. Vermutlich kann man dass nur begreiffen, wenn man selbst sowas geschrieben hat..
Das kannst das mit einer For-Schleife lösen. Da gibt es bestimmt noch elegantere Lösungen, mir ist aber nichts anderes eingefallen. Ich habe etwas ähnliches geschrieben, nur ohne duplicateMovieClip, sondern mit mehrmaligen attachMovieClip. Schau dir mal meinen Code an, vor allem die Funktionen "startBullet" und "moveBullet". Vielleicht kannst du die Idee auf deinen Code übertragen.

Ja, ich kann es begreifen, da ich schon selbst sowas geschrieben habe.

ActionScript:
  1. stop();
  2.  
  3. _root.onLoad = function() {
  4.     _root.initGame();
  5. }
  6.  
  7. _root.onEnterFrame = function() {
  8.     _root.moveMan();
  9.     _root.startBullet();
  10.     _root.moveBullet();
  11. }
  12.  
  13. function initGame() {
  14.     _root.attachMovie("man", "man", 99999999999999999);
  15. // tiefe so hoch, damit der man_mc nie von
  16. // den mc der schüsse überlagert wird   
  17.     man._x = 100;
  18.     man._y = 300;
  19.     speed = 10;
  20.     n = -1;
  21.     bulletStarted = new Array();
  22. }
  23.  
  24. function moveMan() {
  25.     if (Key.isDown(Key.RIGHT)) {
  26.         dx = speed;
  27.         man.gotoAndStop("right");
  28.     } else if (Key.isDown(Key.LEFT)) {
  29.         dx = -speed;
  30.         man.gotoAndStop("left");
  31.     } else {
  32.         dx = 0;
  33.         man.gotoAndStop("normal")
  34.     }
  35.     man._x += dx;
  36.     if (man._x < 45) {
  37.         man._x = 45;
  38.     }
  39.     if (man._x > 650) {
  40.         man._x = 650;
  41.     }
  42. }
  43.  
  44. function startBullet() {
  45.     if (Key.isDown(Key.SPACE)) {
  46.         n++;
  47. // beim ersten Durchlauf ist jetzt n = 0, da anfangs n = -1
  48.         _root.attachMovie ("bullet", "bullet" + n, n);
  49.         _root["bullet" + n]._x = man._x + 35;
  50.         _root["bullet" + n]._y = man._y;
  51.         bulletStarted[n] = 1;
  52.         trace(n);
  53.     }
  54. }
  55.  
  56. function moveBullet() {
  57.     for (var z = n - 100; z <= n; z++) {
  58. // die Startvariable z = n - 100 und nicht z = 0,
  59. // damit das Intervall in der For-Schleife nicht zu groß wird.
  60. // es werden also nur die letzten 100 Schuss überprüft
  61.         if (bulletStarted[z] == 1) {   
  62.             _root["bullet" + z]._x += 30;
  63.             if (_root["bullet" + z]._x > 650) {
  64.                 removeMovieClip("bullet" + z);
  65.                 bulletStarted[z] = 0;
  66.             }
  67.         }
  68.     }
  69. }´
__________________
Es gibt 10 Möglichkeiten: Entweder man versteht das Binär-System oder nicht.

Geändert von Red_Wraith (02-11-2004 um 22:29 Uhr)
Red_Wraith 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 06:56 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele