搜尋文章

2013年4月2日 星期二

Shellrazer 付費內容的設計精神





作者一開始以他過去玩另一款遊戲Battleheart的經驗為例。Shane指出他非常非常喜歡這款遊戲,然而在最後打大魔王時卻不論怎麼打 都打不過。經過一段嘗試之後,Shane理解到以他在遊戲中所組的隊伍是無法擊敗魔王的,因此Shane只好回頭去"練功"升等,但是卻在這個過程中失去 了對遊戲的興趣...
Shellrazer的遊戲流程是遵照經典的RPG Loop: 戰鬥->獎勵->升級。但即便是遵循傳統模式,在設計上依然有許多需要花心思的地方,特別是針對不同的玩家必須要有不同的獎勵方式來鼓勵他們繼續玩下去。Shane則是根據玩家的強項將其區分為三類:技巧(Skill)時間(Time)金錢(Money)
1.技巧型玩家
技巧型玩家追求的是遊戲技巧的卓越,因此設計時要確定遊戲內容有足夠的深度。而所謂的技巧又可分為兩種:操作知識
操作技巧指 的是在遊戲中靈活地操作及熟練地下達各種指令。在Shellrazer中,玩家的烏龜上可以裝備許多個不同的武器,而要同時一一操作這些各自有不同特性的 武器是很需要技術的。此外,Shellrazer中還提供了兩種不同的控制模式讓玩家選擇(單指操作或雙指操作),由於這兩種模式各有優點,因此高手會根 據戰況在此二模式之間切換。以上種種都讓追求操作技巧及手速的玩家們有了奮鬥的目標。
知識指 的是透過對遊戲細節的理解來幫助破關。在Shellrazer中,武器和敵人之間有著如剪刀石頭布的相剋關係,而且根據敵人行動方式的不同也有相因應的武 器,比方說從空中來襲的敵人就適合用對空武器攻擊。因此,對遊戲內容理解程度越高的玩家,越懂得妥善運用金幣來購買最適當的武器。而遊戲中也會獎勵玩家花 費心思及時間來學習遊戲的內容:越了解遊戲的玩家越容易打出高Combo,而高Combo則會帶給玩家更多的金幣作為獎勵。
2.時間型玩家
時間型玩家,顧名思義即為花費許多時間在遊戲上,但不一定具有高超技巧的玩家。因此,為了照顧時間型玩家,必須要確保遊戲在經過長時間遊玩後依然能保持新鮮感及可玩性,同時也要確保遊戲不會"卡關"。
在Shellrazer中,對時間型玩家的照顧主要有下列四點:
  1. 關卡中的敵人是由程式隨機生成,因此每次玩的時候都會有些許不同,藉此確保新鮮感。
  2. 不採用social games中常見的能量系統(Energy),因此玩家每次想玩多久就能玩多久。
  3. 採用類似D&D的升級曲線。越高等級所需的升級經驗越多。參考
  4. 每次玩家打完一關,不論是否成功過關,均給予金幣獎勵(成功過關可另外獲得獎勵物品)。因此即便是技巧不足的玩家,只要花費足夠的時間進行遊戲,最終依然能購得強力的裝備來破關。
3.金錢型玩家
金錢型玩家可說是開發者的衣食父母,他們願意掏出信用卡來幫助自己破關。但是對金錢型玩家的照顧絕非只是設計各種要付費購買的強力武器或道具這麼膚淺。
在Shellrazer中,玩家並不直接用錢來購買武器,而是用錢購買遊戲金幣或是增加自己在遊戲中賺取金幣的速度。也就是說,金錢型玩家並不能夠透過花錢來取得別的玩家無法取得的物品,而是透過花錢來縮短他們取得物品所需要的時間。
此外,在設計Shellrazer中的付費內容時,最核心的宗旨則是尊重
許多開發者將金錢型玩家稱為鯨魚(Whale),意指肥美的獵物。而Shane對此表示不以為然。他認為當你將玩家視做獵物時,你心底其實是將他們當作笨蛋(fool),而難道我們要為笨蛋們做遊戲嗎?這顯然是不正確的。開發者必須尊重玩家,玩家才會尊重你及你的遊戲。
反 映在具體做法上,Shellrazer只有在玩家的金幣用罄時才會彈出讓玩家付費的推銷視窗,除此之外,Shellrazer也堅決不在UI上使手段誘使 玩家在不經意的情況下付錢。Shane同時也指出,他認定Shellrazer大約是$50美金的價值,因此只要玩家花了$50美金之後,基本上就能取得 遊戲中的所有內容,如果玩家花了超過$50,那多出的部分可以說是純粹樂捐給開發者。一但開發者心中有了這條底線,便不會為了追求所謂的"長尾" (Long Tail)而設計出貴而無當的付費內容。
Shellrazer的付費內容可說是相當有成效:約8%的玩家有購買付費內容,而約有30%的總收入是來自付費內容。
資料來源:CH Huang

Flash Professional CS6 透過USB 連接iOS 安裝發佈

在Flash Professional CS6 版本12.0.2.529 中

我們可以透過USB 連接iOS 裝置進行實機測試

在Windows 或MAC OS X 平台兩者皆可

過程無需透過iTunes 或越獄(Jailbreak) 後的iOS 裝置

純粹USB 連接,十分方便

(p.s:如果是用windows的flash發佈的話要先安裝windows版的iTunes)

以下是更新Flash Professional CS6 和連接iOS 發佈方法:
  1. 在官方下載最新Flash Professional CS6 更新:
  2. 安裝完成後, 在Help -> Aboout Adobe Flash Professional 看到新版本編號 (12.0.2.529).
  3. 下載Adobe AIR SDK, 然後設定路徑. (設定方法請參考)
  4. 開啟一個AIR for iOS  新專案.
  5. 設定發佈對象為AIR 3.4 for iOS 或以上版本.
  6. AIR for iOS Settings -> Deployment 中, 選擇以USB 連接iOS 裝置進行實機測試.
    (Install application on the connected iOS device)
注意事項:
若曾經修改host 檔案, 在更新過程會發生錯誤訊息, 請把host 檔案暫時回復, 待更新完成後才可修改.
(host 檔案路徑: C:\Windows\System32\drivers\etc\host)
低調 . . . .

在發佈的過程我自己有遇到 application verification failed ,然後錯誤訊息是寫說請確認裝置容量足夠

Device Error: Please check if there is enough free space on the device 

上網股溝了一下發現也有人遇到同樣的問題,簡單來說就是appid打錯了,不過不知道他為什麼

要報這個跟問題一點都沒關係的error,這是解決方法

不過我的情況有點不一樣因為我是用window的flash開發的,沒有ios的p12檔跟

mobilprovision,然後我又是上網下載之前某個好心的外國人上傳的fake p12檔

但就會一直出現上面的錯誤訊息,到最後請有app開發帳號的同事幫我發佈

一個p12檔跟mobilprovision才成功的

要如何用mac產生這兩個檔下面的連結有還蠻詳細的解說



另外如果有遇到找不到IOS裝置的情況的話,也有解決方法




2013年3月29日 星期五

Citrus Engine(2、3D橫向捲軸遊戲引擎)

最近發現了一個作橫向捲軸遊戲的引擎

名叫:Citrus Engine

他是結合許多flash的遊戲framework在封裝起來的遊戲引擎




















看上圖就知道了他結合哪些東西進去

有starling(flash gpu加速2D引擎)、away3d(flash 3d引擎)

還有三個物理引擎,最常聽到的box2d還有nape跟away3d自己家的awayPhysics

看起來是一個蠻方便的東西,不知道有沒有真的整合的很好

有時間再來研究看看,另外官網有影片教學也有範例檔可以下載


2013年3月28日 星期四

AS3-Vector 初始化

1.
var vec1:Vector.<int> = new Vector.<int>(5);
//第二個參數boolean代表是否能夠修改長度
//var vec1:Vector.<int> = new Vector.<int>(5,true);  
for(i = 0;i<vec1.length;i++){  
    vec1[i] = i;  
}  

2.
var vec2:Vector.<int> = Vector.<int>([1, 2, 3]);  

3. 
var vec3 = new <int>[1, 2, 3];   

2013年3月25日 星期一

starling framework (一)


最近開始想記錄一下starlin的學習過程也算是複習,不然老了很多事都記不得了(咳!

starling是什麼呢?

相信google會很清楚的告訴你的,但這邊還是簡單的一句話介紹一下

就是使用stage3D的GPU加速的2D引擎。

如果有聽沒有懂的話,直接看結果會比較清楚。

以下有兩個swf,滑鼠每click一次會產生一百隻鳥不斷的移動


上面的是沒有使用starling的,只是單純的產生bitmap然後不斷移動

下面的是使用starling,可以比較一下個別產生的物件數及FPS

要分開測試喔!先點清除按鈕清除其中一個內容,不要點了上面的又去點下面的這樣不管怎麼點都會慢唷 !








下面這邊有各種2D引擎的效能比較可以參考看看

2D引擎效能比較

我自己手邊的裝置有測過的

htc desire he  約600

SAMSUNG GALAXY Tab 7.0 700

ipad2 約700

new ipad 約1000

以上的數量是FPS維持在30左右的數目

2013年2月21日 星期四

as3-vector sort


在as3裡,vector可以透過sort()函數來進行排序
跟array比較不同的是,array的sort可以不帶參數或是用定義好的參數帶入
例如:
Array.CASEINSENSITIVE:這個選項會忽略大小寫限制加以排序。例如,小寫字母 b 會排在大寫字母 D 之前。

Array.DESCENDING:這會反轉預設的依遞增順序排序。例如,字母 B 會排在字母 A 之前。

Array.UNIQUESORT:這會在發現兩個相同的值時,中止排序作業。

Array.NUMERIC:這會進行數值排序,因此 3 會排在 10 之前。
在vector的sort裡一定要帶入一個自訂義用來執行排序的function,或是也可以使用上面的參數帶入
例如:vector.sort(Array.CASEINSENSITIVE);
如果今天有5個MovieClip要進行名字的排序的話,就可以用自定義的涵式來執行了。
import flash.display.MovieClip;
import flash.text.TextField;

//先建立5個MovieClip
var mc1:MovieClip = new MovieClip();
var mc2:MovieClip = new MovieClip();
var mc3:MovieClip = new MovieClip();
var mc4:MovieClip = new MovieClip();
var mc5:MovieClip = new MovieClip();
//命名
mc1.name = "mc_1";
mc2.name = "mc_2";
mc3.name = "mc_3";
mc4.name = "mc_4";
mc5.name = "mc_5";
//此時在mcVector裡的MovieClip已經不是按照mc_1、mc_2 ...的順序排列了
var mcVector:Vector.<MovieClip>  = new Vector.<MovieClip>();

mcVector[0] = mc3;
mcVector[1] = mc5;
mcVector[2] = mc1;
mcVector[3] = mc4;
mcVector[4] = mc2;
trace(showName(mcVector));
//output mc_3,mc_5,mc_1,mc_4,mc_2
mcVector.sort(vectorSortFunction);
trace(showName(mcVector));
//output mc_1,mc_2,mc_3,mc_4,mc_5

function vectorSortFunction(firstMc:MovieClip , secandMc:MovieClip)
{
  //先把名字後面的數字拆出來
  var number1:int = int(firstMc.name.split("_")[1]);
  var number2:int = int(secandMc.name.split("_")[1]);
  //之後在用數字去作排序
  if (number1 > number2)
  {
    //這邊返回1的意思是,如果前面的數字大於後面的數字,前面的對象就要往後排
    return 1;
  }
  else if (number1 < number2)
  {
    //返回-1的意思是,如果前面的數字小於後面的數字,前面的對象就要往前排
    return -1;
  }
  else
  {
    //返回0的意思是,一樣的話就不變動順序
    return 0;
  }
}

function showName(vector:Vector.<MovieClip>):String
{
  var _txt:TextField = new TextField();;
  for each (var mc:MovieClip in vector)
  {
    
    _txt.appendText(mc.name+",");
  }
  
  return _txt.text;
}



2012年10月5日 星期五

android-Too large bitmap to be uploaded into a texture

今天遇到了一個問題是開啟了硬體加速後在imageView裡面塞圖片後發現畫面一片黑,
看了log他寫 Too large bitmap to be uploaded into a texture
上網查了一下原因找到這一篇文章
 Too large bitmap to be uploaded into a texture
看來也有人遇到同樣的問題,裡面的回答是
When using hardware acceleration, there is a limit to the size of a texture.
When you render a bitmap, it has to be uploaded to an OpenGL texture first.
Your bitmap happens to be bigger than the maximum texture size on Xoom (2048x2048.)
You need to use a smaller bitmap or split it into several bitmaps.
所以解答就是把圖縮小到2048之內吧 ! !