Zurück   Flashforum > Flash > Flash Einsteiger

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 09-03-2011, 20:02   #1 (permalink)
Neuer User
 
Benutzerbild von Opi3
 
Registriert seit: Dec 2010
Beiträge: 363
Vergesse ich etwas zu Löschen|| Code wird langsammer.

Hallo, hier bin ich wieder.
Ich habe einen Code Geschrieben, um eine (Ziemlich) einfache 2d Map zu erstellen (bin gerade im Array Fieber), wenn mann auf einen Button Klickt wird eine neue "Map" generiert.
Ich habe allerdings das Gefühl, ich vergesse irgendetwas zu löschen; Jedenfalls wird die Swf immer langsamer.
ActionScript:
  1. import flash.display.MovieClip;
  2.  
  3. var horzontal:int = (stage.stageWidth - 80)/20;
  4. var vertical:int = (stage.stageWidth - 40)/20;
  5. var tillholder:Array = [];
  6. var object:MovieClip;
  7. var tillholderclip:MovieClip = new MovieClip();
  8. addChild(tillholderclip);
  9. // var yko = y Koordinate;
  10. // var xko = x Koordinate;
  11. neuesLevelbutton.addEventListener(MouseEvent.CLICK, neuesLevelfunction);
  12. neuesLevel();
  13. //Knöpfe/EventListener
  14. function neuesLevelfunction(event:MouseEvent):void
  15. {
  16.     neuesLevel();
  17. }
  18. //functionen
  19. function neuesLevel():void
  20. {
  21.     removeChild(tillholderclip);
  22.     addChild(tillholderclip);
  23.     for (var yko:int = 0; yko < horzontal; ++yko)
  24.     {
  25.         tillholder[yko] = [];
  26.         for (var xko:int = 0; xko < vertical; ++xko)
  27.         {
  28.             if (Math.ceil(Math.random() * 5) > 1)
  29.             {
  30.                 object = tillholder[yko][xko] = new Grün();
  31.             }
  32.             else
  33.             {
  34.                 object = tillholder[yko][xko] = new Schwartz();
  35.             }
  36.             object.y = 20 * yko + 20;
  37.             object.x = 20 * xko + 20;
  38.             tillholderclip.addChild(object);
  39.         }
  40.     }
  41. }
Es wäre nett wenn ihr mir helfen könntet und eventuell einen Stilltipp zu dieser stelle geben könntet.
Zitat:
if (Math.ceil(Math.random() * 5) > 1)
{
object = tillholder[yko][xko] = new Grün();
}
else
{
object = tillholder[yko][xko] = new Schwartz();
}
Denn über Stieltipps freue ich mich immer sehr
Viele Grüße Opi3
Angehängte Dateien
Dateityp: swf till entvernen.swf (2,2 KB, 5x aufgerufen)
__________________
Es gibt 7 Milliarden Menschen und einer davon bin ich.

Eine Pizza mit r = z und dicke = a hat v = Pi*z*z*a;

Geändert von Opi3 (09-03-2011 um 20:07 Uhr) Grund: jetzt mit anhang
Opi3 ist offline   Mit Zitat antworten
Alt 09-03-2011, 20:31   #2 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.498
ja du vergisst da was

PHP-Code:
//entweder
while(tillholderclip.numChildren>0){
    
tillholderclip.removeChildAt(0);
}
//oder
removeChild(tillholderclip);
tillholderclip = new MovieClip();
addChild(tillholderclip); 
du hast den clip nur von der bühne genommen, dann gleich wieder drauf und neu kästchen über die alten gesetzt. die waren zwar verdeckt, aber immer noch da.

Zitat:
Es wäre nett wenn ihr mir helfen könntet und eventuell einen Stilltipp zu dieser stelle geben könntet.
erstmal würde ich statt
PHP-Code:
Math.ceil(Math.random() * 5) > 
nur
PHP-Code:
Math.random() < .8 
schreiben. das versteht man wesentlich leichter. (etwa 80 % sollen grün sein)

eine alternative für das ganze ding wäre das hier. allerdings ist es immer die frage, ob es wirklich besser zu lesen ist.
PHP-Code:
object 
tillholder[yko][xko] = Math.random() < .8 ? new Grün() : new Schwartz(); 
wie du siehst ist
Zitat:
bedingung ? dann : sonst;
das selbe wie eine if-else-abfrage.


und als letztes natürlich: keine umlaute verwenden

mfg

sx


edit:
ein tipp zum stil hier im forum: poste den code als php und nicht als as. sonst muss man immer die zeilennummern rauslöschen um was damit auszuprobieren. das kann man zwar mit der suchen-und-ersetzen funktion in flash machen, aber es nervt ein wenig.

Geändert von shin10 (09-03-2011 um 20:36 Uhr)
shin10 ist offline   Mit Zitat antworten
Alt 09-03-2011, 20:45   #3 (permalink)
Neuer User
 
Benutzerbild von Opi3
 
Registriert seit: Dec 2010
Beiträge: 363
Zitat:
Grün
<-- ja, das vergesse ich andauernd
aber ansonsten danke,
ich habe gedacht das ich, wenn ich tillholderclip remove und dann wieder adde einen "leeren" tillholderclip habe.
Zitat:
object =
tillholder[yko][xko] = Math.random() < .8 ? new Grün() : new Schwartz();
?

ok, vielen dank, Opi3
Hier die neue Swf

Schade das es nicht irgend so einen ganz ganz tollen "Danke Button" gibt,
auch wenn man sich dafür natürlich auch nichts kaufen kann.
Angehängte Dateien
Dateityp: swf till entvernen.swf (2,2 KB, 4x aufgerufen)
__________________
Es gibt 7 Milliarden Menschen und einer davon bin ich.

Eine Pizza mit r = z und dicke = a hat v = Pi*z*z*a;

Geändert von Opi3 (09-03-2011 um 20:55 Uhr)
Opi3 ist offline   Mit Zitat antworten
Alt 09-03-2011, 21:41   #4 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.498
ein handgeschriebenes dankeschön ist schön genug
es gibt genug leute, die sich gar nicht mehr melden und man weiß dann nichtmal, ob man ihnen helfen konnte. das ist echt blöde.

Zitat:
Zitat:
object =
tillholder[yko][xko] = Math.random() < .8 ? new Grün() : new Schwartz();
?
ich sag ja, das ist nicht unbedingt besser

wie läuft's mit dem elastischen stoß?
shin10 ist offline   Mit Zitat antworten
Alt 10-03-2011, 15:47   #5 (permalink)
Neuer User
 
Benutzerbild von Opi3
 
Registriert seit: Dec 2010
Beiträge: 363
Zitat:
wie läuft's mit dem elastischen stoß?
Macht mir noch ein Paar Probleme, aber ich denke das wird schon.

Ich hätte allerdings noch eine Frage,
wenn ich ein Viereck habe, das ich mit d & d bewege, wie kriege ich es hin, das man es maximal soweit bewegen kann das:
die untere kante nicht über die untere kante der stage kommt&&
die obere kante nicht unter die obere kante der stage kommt&&
die linke kante nicht rechts neben die linke kante der stage kommt&&
die rechte kante nicht links neben die rechte kante der stage kommt.
ich hatte vorhin lauter if abfragen in einem enterframe, die es je nachdem was passiert ist zurückgesetzt haben:
Zitat:
if (kasten.x > 0){
kasten.x = 0;
}
Aber das sieht unschön aus, es wackelt und das gefällt mir nicht.

Vielen dank das ich es soweit geschafft habe und Viele Grüße Ich.

Wenn jemand wissen möchte wofür ich das brauche:
einfach die Swf angucken
(Swf Anleitung:
New = neue Umgebung.
Der Pickel = einzelne Tills "raus hauen"
Die Hand = sich um gucken.)
(Das ein Grafiker/Designer an mir verloren gegangen ist, ist mir bewusst
Angehängte Dateien
Dateityp: swf till entvernen.swf (11,1 KB, 5x aufgerufen)
__________________
Es gibt 7 Milliarden Menschen und einer davon bin ich.

Eine Pizza mit r = z und dicke = a hat v = Pi*z*z*a;

Geändert von Opi3 (10-03-2011 um 16:15 Uhr)
Opi3 ist offline   Mit Zitat antworten
Alt 10-03-2011, 21:34   #6 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.498
ja das kenn ich. das machst du am einfachsten mit Math.min() und Math.max()
PHP-Code:
kasten.Math.max(0Math.min(kasten.x+vXstage.stageWidth -kasten.width ));
kasten.Math.max(0Math.min(kasten.y+vYstage.stageHeight-kasten.height)); 
ich hoffe ich hab mich gerade nicht vertippt.

mfg

sx

Geändert von shin10 (11-03-2011 um 00:01 Uhr)
shin10 ist offline   Mit Zitat antworten
Alt 10-03-2011, 22:42   #7 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
für sowas hab ich mir folgende Funktion geschrieben:
PHP-Code:
function clamp(val:Numbermin:Numbermax:Number):Number
{
  if(
val<min) return min;
  if(
val>max) return max;
  return 
val;
}

//oder kurz:
function clamp(val:Numbermin:Numbermax:Number):Number
{
    return 
val<minminval>maxmaxval;

PHP-Code:
kasten.clamp(kasten.x+vX0stage.stageWidth-kasten.width);
kasten.clamp(kasten.y+vY0stage.stageHeight-kasten.height); 
ich find das hantieren mit min und max an der Stelle etwas unübersichtlich
Zitat:
ich hoffe ich hab mich gerade nicht vertippt.
genau das mein ich
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 10-03-2011, 22:54   #8 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.498
hab flash gerade nicht offen ...
drum mein fauxpas mit stage.width; hätte sich so leider auch nicht vermeiden lassen

sieht nach ner guten alternative aus.
shin10 ist offline   Mit Zitat antworten
Alt 11-03-2011, 14:19   #9 (permalink)
Neuer User
 
Benutzerbild von Opi3
 
Registriert seit: Dec 2010
Beiträge: 363
Oh,
tut mir Leid,
da habe ich wohl etwas ungünstig erklärt.
Die Linke Seite soll nicht rechts über die Linke Seite(usw.) der Stage Kommen

Um konkret zu werden, in der Swf ganz am Anfang einfach mal nach rechts Ziehen

@thomas_E
Du hast doch sicher nichts dagegen wenn der Code sofort in meine Sammlung kommt.
(Das Problem mit dem Wackeln tritt auch auf wenn man deinen Code "Umfunktioniert")
Angehängte Dateien
Dateityp: swf till entvernen.swf (14,3 KB, 4x aufgerufen)
__________________
Es gibt 7 Milliarden Menschen und einer davon bin ich.

Eine Pizza mit r = z und dicke = a hat v = Pi*z*z*a;

Geändert von Opi3 (11-03-2011 um 16:25 Uhr)
Opi3 ist offline   Mit Zitat antworten
Alt 12-03-2011, 09:12   #10 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
das rütteln kommt imho daher, dass du startDrag und stopDrag nutzt und versuchst deren Bewegung in einem "timer" (lass mich raten: ENTER_FRAME?) zu korrigieren.

also entweder programmierst du das so um, dass du die Bewegung über MOUSE_MOVE realisierst und darin die Position direkt einschränkst, oder du übergibst ein Rechteck mit den Bounds an startDrag und lässt die Funktion die Arbeit erledigen.
__________________
greetz Thomas

plz RTFM & Coding Conventions

Geändert von thomas_E (12-03-2011 um 09:13 Uhr)
thomas_E ist offline   Mit Zitat antworten
Alt 12-03-2011, 09:22   #11 (permalink)
Neuer User
 
Benutzerbild von Opi3
 
Registriert seit: Dec 2010
Beiträge: 363
An jeden der es vernünftig machen will:
benutze:
Rectangle
Benutze ich inzwischen auch
und nachdem ich (wie immer durch Probieren und sich ärgern wen es nicht klappt) raus gekriegt habe wies geht kann ich das nur jedem der das gleiche Problem hat ans Hertz legen.
Damit denke ich mal ist das Thema gelöst,
Danke thomas_E,
Danke shin10,
Opi3
Angehängte Dateien
Dateityp: swf Drag & Drop in einem bestimmten Bereich.swf (2,3 KB, 3x aufgerufen)
Dateityp: fla Drag & Drop in einem bestimmten Bereich.fla (8,2 KB, 1x aufgerufen)
Dateityp: swf till entvernen.swf (16,3 KB, 1x aufgerufen)
__________________
Es gibt 7 Milliarden Menschen und einer davon bin ich.

Eine Pizza mit r = z und dicke = a hat v = Pi*z*z*a;

Geändert von Opi3 (12-03-2011 um 22:09 Uhr)
Opi3 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
bereich, bestimmten, drag & drop, in einem, stage

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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Button Code kommt mir etwas lang vor ?! Steven_LS5 ActionScript 3 2 15-07-2010 09:48
script wird immer langsammer bdavidb Flash 8 2 04-10-2005 11:17
Etwas aus einer Variable löschen :( Eddie Rodrigez Flash 4 und Flash 5 1 03-04-2005 14:20
Mein XP-Home Rechner wird immer langsammer Sören Am Rande 33 01-06-2003 15:56
in einem Textfeld etwas löschen (nicht alles) splasher Flash 4 und Flash 5 2 28-03-2002 20:55


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:32 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele