Zurück   Flashforum > Flash > Mobile Flash und Flash Lite

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 09-10-2010, 14:03   #1 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.298
iphone - Schriften/Textfield = Performance Killer?

Hab auf meinem iPhone 2G arge Probleme Schriften in Textfeldern flüssig darstellen zu können: z.B. reicht schon ein einziges Textfeld aus um die Framerate von 31 fps auf 6-8 sinken zu lassen. Vorausgesetzt das Textfeld ist dynamisch und bekommt jeden Frame einen neuen Text zugewiesen.

Verwende ein iPhone 2G 3.1.3 (7E18), Jail Break, Modell: MA712LL

Wer selbst mal ausprobieren möchte, hier der code den ich verwendet habe:

ActionScript:
  1. var format:TextFormat = new TextFormat()
  2. format.font = "_sans"
  3. format.size = 16;
  4. format.color = 0x0;
  5. format.align = "center";
  6.  
  7. _tf = new TextField()
  8. _tf.defaultTextFormat = format; 
  9. _tf.text = "Some Text";
  10. _tf.width = 300;
  11. _tf.height = 30;
  12. _tf.selectable = false;
  13. _tf.mouseEnabled = false;
  14. addChild(_tf);
  15.  
  16. // im EnterFrame dann
  17.  
  18. private function onUpdate(e:Event):void
  19. {
  20.     e.stopPropagation();
  21.    
  22.     _tf.text = "Time: " + getTimer();
  23. }

Ich versteh nicht was dabei so arg viel Performance kostet, dass die fps einbrechen. Immerhin verwende ich nicht einmal ebmedded fonts ?!? Kann es sein, dass es am JailBreak liegt?

Bin für jeden Hinweis dankbar
__________________
--- :P ---

Blog
Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker

Geändert von _geo_ (09-10-2010 um 15:35 Uhr)
_geo_ ist offline   Mit Zitat antworten
Alt 09-10-2010, 15:41   #2 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.298
Hab nun als Workaround eine Klasse erstellt die mir eine Zahl aus einem Textfeld generiert in dem es die Ziffern "0-9", "-" und "." als BitmapData speichert und in eine "große" Bitmap schreibt.

Lösung ist das immer noch keine, allerdings hab ich nun 16 - 20 fps statt 6-8.

Für die dies interessiert:
ActionScript:
  1. package
  2. {
  3.     import flash.display.Bitmap;
  4.     import flash.display.BitmapData;
  5.     import flash.display.Sprite;
  6.     import flash.geom.Matrix;
  7.     import flash.text.TextField;
  8.    
  9.     /**
  10.      * ...
  11.      * @author geo
  12.      */
  13.     public class NumberAsTexture extends Sprite
  14.     {
  15.         private var _tmpMatrix:Matrix;
  16.         private var _numOfChars:uint;
  17.         private var _numberAsBitmapData:BitmapData;
  18.         private var _numberAsBitmap:Bitmap;
  19.         private var _number:Number;
  20.         private var _numAsString:String;
  21.         private var _charLookup:Array;
  22.         private var _digitBitmaps:Vector.<BitmapData>;
  23.        
  24.         public function NumberAsTexture(num:Number, tf:TextField, numOfChars:uint = 8)
  25.         {
  26.             super();
  27.            
  28.             // prepare tf
  29.             tf.width = 4;
  30.             tf.height = 4;
  31.             tf.autoSize = "left";
  32.            
  33.             // update sprite
  34.             x = tf.x;
  35.             y = tf.y;
  36.             mouseEnabled = tf.mouseEnabled;
  37.            
  38.             // number of digits defines the size of the generated bitmap
  39.             _numOfChars = numOfChars;
  40.            
  41.             // preapre matrix
  42.             _tmpMatrix = new Matrix();
  43.            
  44.             // possible chars
  45.             _charLookup = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '.', '-'];
  46.            
  47.             // prepare bitmaps
  48.             _digitBitmaps = new Vector.<BitmapData>();
  49.             _digitBitmaps.length = _charLookup.length;
  50.             _digitBitmaps.fixed = true;
  51.            
  52.             // create bitmaps
  53.             for (var i:uint = 0; i < _charLookup.length; ++i)
  54.             {
  55.                 tf.text = "";
  56.                 tf.width = 4;
  57.                 tf.height = 4;
  58.                 tf.text = _charLookup[i];
  59.                
  60.                 _digitBitmaps[i] = new BitmapData(tf.textWidth, tf.textHeight, true, 0x00ffffff);
  61.                 _tmpMatrix.identity();
  62.                 _tmpMatrix.tx = -2;
  63.                 _digitBitmaps[i].draw(tf, _tmpMatrix);
  64.             }
  65.            
  66.             // create final output bitmap
  67.             _numberAsBitmapData = new BitmapData( _digitBitmaps[0].width * _numOfChars + 2,
  68.                                              _digitBitmaps[0].height, true, 0x00ffffff);
  69.             _numberAsBitmap = new Bitmap(_numberAsBitmapData);
  70.            
  71.             addChild(_numberAsBitmap);
  72.            
  73.             number = num;
  74.         }
  75.        
  76.         public function get number():Number { return _number; }
  77.        
  78.         public function set number(value:Number):void
  79.         {
  80.             if (_number == value)
  81.                 return;
  82.  
  83.             _number = value;
  84.             _numAsString = String(value);
  85.             _tmpMatrix.identity();
  86.             _tmpMatrix.tx = 2;
  87.             _numberAsBitmapData.fillRect(_numberAsBitmapData.rect, 0x00ffffff);
  88.            
  89.             var l:uint = _numAsString.length;
  90.             var char:BitmapData;
  91.             for (var i:uint; i < l; ++i)
  92.             {
  93.                 char = _digitBitmaps[ _charLookup.indexOf(_numAsString.charAt(i)) ];
  94.                
  95.                 _numberAsBitmapData.draw( char, _tmpMatrix );
  96.                 _tmpMatrix.translate(char.width, 0);
  97.             }
  98.         }
  99.        
  100.     }
  101.  
  102. }


Benutzt wirds so:
ActionScript:
  1. var texField:TextField = new TextField();
  2.  
  3. var tfAsTexture:NumberAsTexture = new NumberAsTexture(54231, texField);
  4. addChild(tfAsTexture);
  5.  
  6. // udpate der zahl
  7. tfAsTexture.number = 123.4;

Lösung ist das aber immer noch keine *grml*. Ist das iPhone (2G) echt so lahm?

Wenn ich alles in Texturschnipsel zerlegen muss, dann kann ich auch gleich Objective-C und OpenGL nutzen, denn dafür brauch ich keine Flash LLVM *frust*.
__________________
--- :P ---

Blog
Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker

Geändert von _geo_ (09-10-2010 um 15:58 Uhr)
_geo_ ist offline   Mit Zitat antworten
Alt 09-10-2010, 20:43   #3 (permalink)
Neuer User
 
Registriert seit: Oct 2004
Ort: Berlin
Beiträge: 478
Ohne den Code zu überprüfen. Auf einem alten 2G wirst Du im Moment kaum eine sinnvolle App mit dem iPhone Packager machen können.

Ich habe ein 3GS und da sind simpelste Animationen schon verhältnissmäßig 'ruckelig'.

Das ist wohl alles eher noch in 'work in progress'. Wenn man nicht zu Objective-C und Co. direkt greifen möchte, muss man sich da im Moment noch sehr einschränken.

PS: Ich hoffe Adobe teilt uns bald mit, wann bzw. ob ein neues Update geplant ist.
__________________
Adobe Flash CS5: Das Handbuch
Webdesign und Webentwicklung: medianetic

Gesendet von meinem Windows-PC.
Blog-relaunch: http://www.blog.medianetic.de
medianetic ist offline   Mit Zitat antworten
Alt 09-10-2010, 20:50   #4 (permalink)
Neuer User
 
Registriert seit: Oct 2004
Ort: Berlin
Beiträge: 478
Native Apps laufen auf einem 3G allerdings auch nicht mehr flüssig.
__________________
Adobe Flash CS5: Das Handbuch
Webdesign und Webentwicklung: medianetic

Gesendet von meinem Windows-PC.
Blog-relaunch: http://www.blog.medianetic.de
medianetic ist offline   Mit Zitat antworten
Alt 09-10-2010, 21:12   #5 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.298
Hi, danke für die Bestätigung meiner Vermutung

Da mein Geldbörsel zurzeit keine 400€ für ein neues iPhone bereitstellen kann/möchte, werd ich wohl erst mal meine iPhone-Versuche einstellen.

Auch bin ich skeptisch ob es überhaupt jemals eine Packager Version geben wird die auch auf solch alten Geräten läuft. Ich denke Adobe schraubt zurzeit eher an ihrem Air für Android SDK und der Runtime dafür.

Na ja vllt wirds ja mal was mit Flash auf dem iPhone. Im Moment macht es wohl keinen Sinn darauf zu setzen wenn man sowieso nur die neueste Generation an Geräten damit ansprechen kann.

lg

edit: Jetzt erst gesehen in deiner Signatur: "Gesendet von meinem Windows-PC. " - sehr geil
__________________
--- :P ---

Blog
Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker

Geändert von _geo_ (09-10-2010 um 21:16 Uhr)
_geo_ 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Flash 8] var performance:killer yuppy Flash Einsteiger 7 22-02-2009 19:17
TextField.autoSize: Performance-Killer? wanst ActionScript 2 2 07-06-2007 21:20
Performance Killer jack01 Flash MX 1 08-09-2005 10:47
performance killer! bitte um eure hilfe! merlin0815 ActionScript 1 16 30-12-2002 10:06
performance-killer softcoded Flash 4 und Flash 5 0 12-12-2002 08:52


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele