2013-06-23

NetworkInfo 在 iOS 上並不支援

測試一個想法, 試了幾次, 發現在 NetworkInfo.networkInfo.findInterfaces() 時當掉, 才找到這篇 Getting iPad or Android device MAC address doesn't work。 NetworkInfo.isSupported 在 iOS 上得到 false, 殘念, 得不到 IP 位址。

2013-06-20

免費的 Puzzle 24 lite 上架

Puzzle 24 的免費版 Puzzle 24 Lite 上架了, 請看  Puzzle 24 Lite
限制是只能存自製的兩個拼圖, 其它功能就都一樣。

原本想放廣告的(其實已經放了),但是由於某個原因所以廣告是看不到的,請安心服用 XD。

Adobe Gaming SDK 裡有幾個 iOS ANE(真是佛心來著,還附範例檔),其中最簡單應該就是 iAd 的 StageBannerAd,Puzzle 24 Lite 用的就是這個。但是 App 的分類如果是 for kids 就殘念了:

Note: iAd policy does not allow for rich media ads in apps designed for children.

就是踩到這個地雷,只能怪自己沒做好功課 :'(。

2013-06-07

dispose 時該做些什麼

參考 Starling 論壇: question on dispose()
override public function dispose():void
{
    //dispose bitmapData
    bitmapData.dispose();
    //dispose other object witch need
    aStar.dispose();
    //set var to null, I read it was useless now, but it can t be bad..
    myObject = null;
    //remove all your listener
    removeEventListener(EnterFrame, onEnterFrame);
    //removeChild big layer to help GC to get faster
    removeChild(layer);
    //stop any timer, object, video, connection, nstream etc...
    timer.stop();
    //unregister from object if you use this
    unregisterFrom(objectListen);
    //call manually the gc if it's a big big object in memory.
    //You also can call the gc in the method witch call the object.dispose();
    System.gc();
    //call super.dispose()
    super.dispose();
}

Starling 效能小記

做一個小遊戲的時候遇到生成大地圖的效能問題,用 FarLog 檢視,在 iPad2 各部份花費的時間如下:

0192 ms: 用 Flash MovieClip 拼地圖,未顯示出來,約1200 小片,2000px*2000px。
0031 ms: 建立 BitmapData 物件,尺寸 2000px*2000px,下同。
0094 ms: BitmapData 物件 draw Flash MovieClip。
2974 ms: 由 BitmapData 物件建立 Texture 物件。
0001 ms: 由 Texture 物件建立 Image 物件。

顯然 Texture.fromBitmapData( bitmapData ) 是效能的瓶頸。

後記一: 用 小 Texture 做成 Image 再拼成地圖,建立的全部時間為 356 ms,好很多。But... 執行時地圖要跟著捲動,捲動時效能變得很差。

後記二: Texture.fromBitmapData() 第二個參數 generateMipMaps 設為 false 時,花費時間為原來的 1/10 ~ 1/9,快相當多。MipMaps 有它的好處但大部份時是用不上的。

遠端除錯 FarLog 修正

FarLog 修正,主要是讓訊息可以依照時間排序。舊文章: AIR for iOS 實機測試時的遠端除錯 FarLog
PHP 簡單三個檔: index.php (顯示), log.php (接收) 和 clear.php (清除)。log.php 接收資料記錄到文字檔裡,由 index.php 顯示文字檔內容。
log.php
<?php
if(isset($_REQUEST['log'])) {
  $fp = fopen('log.txt', 'a+');
  fwrite($fp, $_REQUEST['log'] . "\n");
  fclose($fp);
}

index.php
<?php
$filename = 'log.txt';
$fp = @fopen($filename, 'r'); // Open the file

if ($fp) {
  // Add each line to an array
  $array = explode("\n", fread($fp, filesize($filename)));
  // assoc array
  foreach($array as $v) {
    $ar = explode(' : ', $v );
    $assoc_ar[$ar[0]] = $ar[1];
  }

  echo '<meta charset="UTF-8"><pre>';
  ksort($assoc_ar, SORT_NUMERIC); // sort
  foreach($assoc_ar as $k=>$v) {
    echo $k . ' -> ' . $v . "\n";
  }
  echo '</pre>';     
}

clear.php
<?php
unlink('log.txt');

AS 的部份使用 lin.shinder.utils.FarLog 類別的 log() 靜態方法,沒有變更動。

2013-06-06

iOS launch images

iOS launch images: 參考 Adobe 線上說明文件

File name Image size Usage
Default.png 320 x 480 iPhone, standard resolution
Default@2x.png 640 x 960 iPhone, high resolution
Default-568h@2x.png 640 x 1136 iPhone, high resolution, 16:9 aspect ratio
Default-Portrait.png 768 x 1004 (AIR 3.3 and earlier)
768 x 1024 (AIR 3.4 and higher)
iPad, portrait orientation
Default-Portrait@2x.png 1536 x 2008 (AIR 3.3 and earlier)
1536 x 2048 (AIR 3.4 and higher)
iPad, high resolution, portrait orientation
Default-PortraitUpsideDown.png 768 x 1004 (AIR 3.3 and earlier)768 x 1024 (AIR 3.4 and higher) iPad, upside down portrait orientation
Default-PortraitUpsideDown@2x.png 1536 x 2008 (AIR 3.3 and earlier)1536 x 2048 (AIR 3.4 and higher) iPad, high resolution, upside down portrait orientation
Default-Landscape.png 1024 x 768 iPad, left landscape orientation
Default-LandscapeLeft@2x.png 2048 x 1536 iPad, high resolution, left landscape orientation
Default-LandscapeRight.png 1024 x 768 iPad, right landscape orientation
Default-LandscapeRight@2x.png 2048 x 1536 iPad, high resolution, right landscape orientation
Default-example.png 320 x 480 example:// URL on standard iPhone
Default-example@2x.png 640 x 960 example:// URL on high-resolution iPhone
Default-example~ipad.png 768 x 1004 example:// URL on iPad in portrait orientations
Default-example-Landscape.png 1024 x 768 example:// URL on iPad in landscape orientations

2013-06-05

Puzzle 24 在 iTunes App Store 上架了


之前寫的一些小 App 大都是在 Android 上自己玩玩, 沒有上架問題,"Puzzle 24" 是個人第一個上架的 iOS App(喂~ 慢了別人三年以上,淚)。

玩法是要放在正確的位置上才算完成一個拼圖片,可以從相片裡的照片製作個人拼圖。單一拼圖玩的時間有刷新記錄時,會儲存起了。

為什麼定價為美金 2 元?覺得第一支 App 一定要定個合理的價格,不考慮銷售情況。(另一個原因是免費 App 放廣告也不是不用時間成本,懶)。

"Puzzle 24" 使用 Flash CS6 / AIR 3.8 / Starling / Feathers 開發,效能上不盡人意,主要有兩處。一是載入照片時,在 iPhone 5 上還好;iPhones 4S上有些慢;iPad2 上很快,因為照片尺寸較小。二是建立拼圖時,iPhones 4S上可以感覺到慢, iPhone 5 和 iPad2 還好。實機測試就上述的三台,iPad2、iPhone 4S 和 iPhone 5。在 iPad2 上,螢幕夠大,效果最好。


2013-06-01

Feathers components 的字型

Feathers :UI components for Starling Framework
看它的 Demo 感覺滿不錯的,但試玩就處處碰壁。

首先,themes 並不包含在 feathers.swc 裡,必須另外設定 themes 的路徑。themes 和 demo 的原始碼都有包含在下載包裡。

第二,使用某個 theme 時 ( 相信你大概只會想使用 MetalWorksMobileTheme ),在 PC 上測試由於 DeviceCapabilities.dpi 只有 72,字會變得很小,可以改成 326 ( http://forum.starling-framework.org/topic/xscreendpi-and-web-applications-without-air )。

第三,使用某個 theme 之後,components 的字型、大小是不能在建立 components 後更改的,而必須使用繼承的方式設定 ( http://wiki.starling-framework.org/feathers/extending-themes )。

AS3 Vector 的用法

AS3 的 Array 和 Vector 用法相近,主要是在讀取元素時的效能差異。

Vector 的宣告方式:
var 變數名:Vector.<類型>;

宣告並建立物件 (初始化):
var 變數名:Vector.<類型> = new Vector.<類型>();

宣告並建立物件 (保留 10 個元素參照的位置):
var 變數名:Vector.<類型> = new Vector.<類型>(10);

宣告、建立並指定元素值 (兩種做法):
var v2:Vector.<String> = new <String>['shinder', 'qop', 'vector'];  // 常用

var v1:Vector.<String> = Vector.<String>(['shinder', 'qop', 'vector']);

Array 和 Vector 在變動長度的操作時, 如 pop()、push() 和 splice() 效能都不是很好,儘量避免。照道理講設定元素值時 ( push() 或 = 設定 ),Vector 會作類型確認,速度應該比 Array 差一點。但讀取時,Vector 元素都是同一類型,讀取後無需再做型別轉換,效能就會比 Array 好一點。


FB 留言