2014年1月31日 星期五

Pyro Particle Editor SetLocalMatrix 矩陣用法

最近在工作上使用了 Pyro Particle Editor     官網在這:http://pyro.fenomen-games.com/

可能有點冷門吧,它的SDK使用在網路上查不到什麼教學,只能看裡面的範例寫程式,但範例只有寫到CPyroEmitter控制XY來改變位置,那旋轉或縮放呢?

在IPyroParticleEmitter類別內確實是有一些控制的函數,不過只用上SetLocalMatrix就很好用了,可是參數const float m[3][4]要怎麼填?

我以D3DX的D3DXMATRIX為例子:

//宣告D3D的矩陣
D3DXMATRIX Mat;

//之後Mat填入或計算自己想要的移動旋轉或縮放


//Mat算好後,依下面順序填入
float m[3][4]={{Mat._11,Mat._21,Mat._31,Mat._41},
{Mat._12,Mat._22,Mat._32,Mat._42},
{Mat._13,Mat._23,Mat._33,Mat._43},};

//在類別render之前呼叫SetLocalMatrix 即可
m_pEmitter->SetLocalMatrix(m);
m_pEmitter->Render();

依每個人不同的用法,要改一下程式,我是直接在CPyroEmitter類別加上void Render(float m[3][4])
{
if( m_pEmitter ){
m_pEmitter->SetLocalMatrix(m);
m_pEmitter->Render();
}
}

但重點就是矩陣填入的方式,我一開始填成Mat._11,Mat._12的順序,浪費不少時間,這邊做個記錄,說不定也可以幫到別人。


2014年1月11日 星期六

onActivityResult 無法接收到 resultCode與data

今日快樂的使用onActivityResult時,竟然收到resultCode=0與data=null。
不過requestCode到是正常,這可怪了,之前可用得好好的,網上查了一下,也沒找到答案。

想了想,這次使用setResult的時機是在onDestroy內呼叫的,會不會是這個原因呢?以往都是按下button才呼叫setResult,之後接著finish();離開這個Activity,這次剛好想在onDestroy才回傳,結果失敗了。

也有試著在onStop內做同樣的事,也是失敗,會不會onStop與onDestroy內原本就不能做setResult呢?

當然啦,細節還是以後再想,先解決問題,就先不要在onDestroy內呼叫setResult。改成在keyDown內呼叫,程式碼如下:
public boolean onKeyDown(int keyCode, KeyEvent e) {
    if(keyCode == KeyEvent.KEYCODE_BACK && 0==e.getRepeatCount() )        {
    Intent intent = new Intent();
    Bundle bundleBack = new Bundle();
    bundleBack.putInt("val", "100");
    intent.putExtras(bundleBack);      
    setResult(RESULT_OK, intent);
     finish();
    }
    return false;
}