星期五, 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 (12, 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 (12, 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

星期二, 4月 13, 2010

水草漂動 / 樹葉搖晃 的效果 DisplacementMapFilter, perlinNoise

Perlin noise是一種產生雜訊點陣圖的一種演算法
是由Ken Perlin所發明的
原本的目的是為了1982年的電影Tron(電子世界爭霸戰)所開發的演算法
這種雜訊是用來模擬火焰、煙霧、水波的效果
Ken Perlin因為開發了這個演算法而得到了1997年的奧斯卡技術成就獎
Perlin noise原本是產生2D雜訊,但是隨著產業界的需求之增加
後來出現了3D版本的Perlin noise,可以模擬3D的火焰等特效

通常要模擬水波、飄動的特效
會使用Perlin noise搭配所謂的displacement map特效
也就是Flash裡面的DisplacementMapFilter
這個特效是用來扭曲變形一張圖用的
所以應該可以達到你說的水草飄動效果(其實是扭曲)

要使用displacement map特效需要兩張尺寸一樣的圖
第一張是原圖,第二張是扭曲參考圖
而這張參考圖我們要使用Perlin noise

轉載自 #19OYjs7P (Flash) [ptt.cc] cjcat2266


以下是西街貓(cjcat2266)附上的參考
var bmpd:BitmapData = new BitmapData(180, 280);
var bmp:Bitmap = new Bitmap(bmpd);
bmp.x = 180;
addChild(bmp);

var dmf:DisplacementMapFilter = new DisplacementMapFilter(bmpd, new Point(), 1, 2, 20, 20, "clamp");

addEventListener(Event.ENTER_FRAME, update);
function update(e:Event):void
{
bmpd.perlinNoise(200, 200, 2, 0, false, false, 3, false, [new Point(0, getTimer() / 50), new Point(20 * Math.sin(getTimer() / 1000), getTimer() / 20)]);
sw2_mc.filters = [dmf];
}





KeyWord: DisplacementMapFilter, perlinNoise

參考資料
#19OYjs7P (Flash) [ptt.cc] cjcat2266
#19OZ7PwE (Flash) [ptt.cc] cjcat2266