星期一, 8月 09, 2010

Flash Scene - 多場景互動

在開發flash 的時候,用多個場景可以讓版面和時間軸保持乾乾淨淨~

可是今天發現不同場景互相呼叫 function 的時候,被呼叫的 function 會跑到呼叫者的場景
而不同場景上的元件是不能互相存取的! (這個部分是經驗而已,有誤請不吝指正:D)

以下舉個例子:

scene1 - function1 { call mc1; call function2; }
              \ mc1

scene2 - function2 { call mc2; }
              \ mc2

依此例來討論,function1 呼叫 function2 的時候, function2 會在 scene1 中被執行
如此一來就會發生錯誤,因為 scene1 中並沒有 mc2


解決辦法:

在 function2 第一行插入 gotoAndStop(1, "scene2");
則會先跳轉到 scene2 後才會執行接下來的程式碼 就不會出現錯誤



另外附上從 ActionScript 3.0 語言和組件參考 中列出場景的範例

for (var i:uint = 0; i < MovieClip(root).scenes.length; i++)
 {
    var scene:Scene = MovieClip(root).scenes[i];
    trace("scene " + scene.name + ": " + scene.numFrames + " frames");
}

星期五, 7月 09, 2010

var_export,var_dump(),print_r()
2009-03-18 10:01
var_export ( mixed expression [, bool return] )
此函數返回關於傳遞給該函數的變量的結構信息,它和var_dump()類似,
不同的是其返回的表示是合法的 PHP 代碼。
您可以通過將函數的第二個參數設置為 TRUE,從而返回變量的表示
。

$a = array (1, 2, array ("a", "b", "c"));
var_export($a);

輸出:
array (
   0 => 1,
   1 => 2,
   2 => 
   array (
     0 => 'a',
     1 => 'b',
     2 => 'c',
   ),
)
var_dump ( mixed expression [, mixed expression [, ...]] )
此函數顯示關於一個或多個表達式的結構信息,包括表達式的類型與值。
數組將遞歸展開值,通過縮進顯示其結構。


$a 
= array (1, 2, array ("a", "b", "c"
));
var_dump ($a);

輸出:
array(3) {
   [0]=>
   int(1)
   [1]=>
   int(2)
   [2]=>
   array(3) {
     [0]=>
     string(1) "a"
     [1]=>
     string(1) "b"
     [2]=>
     string(1) "c"
   }
}


$b = 3.1
;$c = TRUE;
var_dump($b,$c);

輸出:
float(3.1)
bool(true)





print_r()類似var_dump



轉自: 瀟瀟雨

星期五, 7月 02, 2010

XNA 按鍵偵測

KeyboardState kbs;

kbs = Keyboard.GetState();
if (kbs.IsKeyDown(Keys.A) == true)
    move.X -= 1;
if (kbs.IsKeyDown(Keys.D) == true)
    move.X += 1;
if (kbs.IsKeyDown(Keys.S) == true)
    move.Y += 1;
if (kbs.IsKeyDown(Keys.W) == true)
    move.Y -= 1;

XNA 碰撞偵測、反彈

延續上一篇

if (squRect.Intersects(boardRectTop))
{
    move.Y *= -1; ;
}
if (squRect.Intersects(boardRectBottom))
{
    move.Y *= -1;
}
if (squRect.Intersects(boardRectLeft))
{
    move.X *= -1;
}
if (squRect.Intersects(boardRectRight))
{
    move.X *= -1;
}

可以做個class比較方便

XNA 滑鼠拉動投擲

UPDATA:

MouseState preMouseState, mouseState;
bool flag = false;
Vector2 move;

mouseState = Mouse.GetState();
Rectangle squRect = new Rectangle((int)position.X, (int)position.Y, square.Width, square.Height);
Rectangle mouseRect = new Rectangle(mouseState.X, mouseState.Y, 0, 0);
if (squRect.Intersects(mouseRect) && mouseState.LeftButton == ButtonState.Pressed && flag == false) //squRect.Intersects(mouseRect) : //滑鼠點擊的地方是否在方框內
{
    preMouseState = mouseState;
    flag = true;
}
if (mouseState.LeftButton == ButtonState.Released && flag == true) //已放開且上個狀態是按下
{
    move.X = (mouseState.X - preMouseState.X) * 0.3F;
    move.Y = (mouseState.Y - preMouseState.Y) * 0.3F;
    flag = false;
}
//move是加速度, position是square的座標
position.X += move.X;
position.Y += move.Y;

//漸變阻尼
if (position.Y >= height - square.Height)
    moveX *= 0.95;
else
    moveX *= 0.995; //碰到地板阻尼較大
moveY *= 0.98;

星期五, 6月 04, 2010

Class的const對象與const成員函數

遇到的問題:

程式碼:

IntArray(const IntArray &copy)
{
        array = new int[copy.getSize()];
        for(int i=0;i<copy.getSize();i++)
                array[i] = copy[i];
        size = copy.getSize();
}


輸出:

1>.\test06.cpp(33) : error C2662: 'IntArray::getSize' : 無法將 'this' 指標從 'const IntArray' 轉換成 'IntArray &'
1>        轉換遺失限定詞
1>.\test06.cpp(34) : error C2662: 'IntArray::getSize' : 無法將 'this' 指標從 'const IntArray' 轉換成 'IntArray &'
1>        轉換遺失限定詞
1>.\test06.cpp(35) : error C2678: 二元運算子 '[' : 找不到使用左方運算元型別 'const IntArray' 的運算子 (或是沒有可接受的轉換)
1>        .\test06.cpp(65): 可能是 'int &IntArray::operator [](int)'
1>        當嘗試符合引數清單 '(const IntArray, int)' 時
1>.\test06.cpp(36) : error C2662: 'IntArray::getSize' : 無法將 'this' 指標從'const IntArray' 轉換成 'IntArray &'
1>        轉換遺失限定詞


如果將程式改為

IntArray(IntArray &copy)
{
        array = new int[copy.getSize()];
        for(int i=0;i<copy.getSize();i++)
                array[i] = copy[i];
        size = copy.getSize();
}

或是

IntArray(const IntArray &copy)
{
        array = new int[copy.size];
        for(int i=0;i<copy.size;i++)
                array[i] = copy.array[i];
        size = copy.size;
}

就沒有問題

size, getSize() 皆為 public member
getSize() 只有return size而已
有overload operator[]

想問的是為什麼加了const後就只能用member variable而不能用member function?




推 littleshan:getSize() {...} 要改成 getSize() const {...}          06/03 10:04
→ littleshan:原因...請翻書 (煙                                                 06/03 10:04
推 ilovebbs:const對象只能使用const成員函數~                  06/03 10:43



另外查的資料
擴擴咱 - C++ 學習筆記:長相怪異的 const 成員函數

總之就是…
1. const對象只能使用const成員函數
2. const成員函數範例 void myClass::foobar() const {}
3. 其實「const 成員函式」的道理非常簡單,const加在函式後面的意思就是「限定一個函數只能取得資料,不能改變資料」。物件導向語言裡面會看到getter函式和setter函式概念的設計,他們的功能主要是讓私有變數可以用公有函數來存取 (在AS3.0裡甚至可以像物件屬性

星期六, 5月 01, 2010

C# 應用程式設定檔(app.config) & 縮小到右下(NotifyIcon) & Timer

using System.Configuration
讀取設定檔需要的
不過可以用app.config就好
http://www.dotblogs.com.tw/yc421206/archive/2009/04/14/8000.aspx

EX:
using getFlowForm.Properties; //使用這個應用程式的命名空間
然後用
myIP = Settings.Default.IP;
Settings.Default.IP = "0.0.0.0";

直接讀寫


--
System.Timers.timer 和System.Windows.Forms.Timer不同
前者提供較多選項,而後者則較簡易

前者原本就預設會重複執行,要關閉則用Enable = false;
後者則否,需要AutoReset = true;


--
將程式置於右下角的工具列
NotifyIcon

http://www.dotblogs.com.tw/chou/archive/2009/02/25/7284.aspx