遊戲邏輯設計 - 淺談碰撞

在flash學習過程中,也許你學習到許多語法,但你卻不知如何用它,在遊戲設計碰撞到
物件就無法行走,今天我們不談語法, 偏重在學習邏輯設計上,

以下是 遊戲設計碰撞時, 可能需要的方法:


1. 當碰撞時,產生反作用力 如果你產生行走的 power=1.2 反作用力 power = -1.2
    一加一減相抵消

2.另一作法是控制住你的變數 , 當碰撞時就鎖住你的 方向 變數與加速度
   舉個例子,你power = 1.2  xspeed +=power ;  則當發生碰撞時,
   power = 0 ; 產生的加速 xspeed = 0 ;

3.第三種作法是 一般國外做遊戲碰撞常用的邏輯, 跟 第2點提到很像
   它是以你物件下一步要走的位置,來判斷 是否你下一步要走到的位置
   是否與物件發生碰撞
  
  舉個例子;

  物件在 (x ,y ) , 你下一步要往左走 , 也就是 (x -1 , y) , 我們事先將下一步要走的
  (x-1, y)座標, 與下一步會碰撞到的物件 做偵測
  假設下一步(x-1, y) , 在(x-1, y)並沒有障礙物 , 則可以work
  若否 , 則不work !


   不管是上面那一種方法 勢必都要以你要物件碰撞的方向去偵測
 
   舉個例子 :

            物件座標是(x , y) , 它的左碰撞點是在  (x- 20 , y ) ;20只是假設
            表示 碰撞點在你物件的左方座標 (用該座標去偵測與邊界是否碰撞
            或是 用 左物件與物件 去碰撞偵測  偵測是否左方發生碰撞)


4. 再來談談碰撞語法

  flash 內建的碰撞 hitTestObject  這是一個很"陽春"的碰撞

  它有一個很大的缺點 就是它碰撞是以 物件元件的藍色外框邊界做為判斷

  假設你有一個圓形的物件 要跟正方體碰撞  還未碰到圓形就顯示碰撞了
  因為圓物件外框是以四方藍色邊界所圍起來 , 當碰到元件邊框時就產生
  碰撞
 
 
  而且 如果你物件是中空的情況, 你要偵測的物件又在物件裡, 那更是糟糕
 



 所以為了解決這問題 在國外早就有人把完美的碰撞法
 寫出來給大家使用, 是一種 以"像素"偵測"像素"法來偵測碰撞 ,就再也不
 會有形狀偵測上的問題






  • 留言者:
  • Email:
  • 網址:
  • 日期: 2010-10-12 11:07:27
請問是否可以提供一下國外寫好的碰撞的source code呢?或者是否可以提

供個好網站來參考~感謝~

我歷年的flash書籍


不知不覺flash書籍超過了17本 , 還有一些沒照到就留待回家整理完再合照好了



在此為各位簡介一下我使用的flash書籍

FlashMX2004 語法字典  博碩出版
as2.0語法全靠它了,每一部份細分的很清楚,查找很容易

ActionScript3.0 語法字典 博碩出版
相對as2.0那本這本編排比較不太好,要找一些東西分類上有些問題 ,3.0就靠它了

PHP for flash
其實市面上 php for flash就有3-4版本 , 後來還是最早期的 php for flash寫的最好
後面寫的內容都不是很推薦

Flash Actionscript2.0 RIA
這本很多觀念教學導正 , 很適合美工程式人員來看,沒有想像中的那麼"程式"

Flash MX (紅色那本)
這本很多特效可以參考,最重要是它最後面有介紹可以去flash邊框的軟體
我應該是為這個而買的,jugglv這套

Flash Lite 2.x 手機遊戲
如果你有可支援 flash lite2.0以上的手機千萬別錯過這好機會
打開你的手機 撰寫自己的介面與遊戲

Flash遊戲設計與製作
這本是介紹flash遊戲各種邏輯,是一本很重要的遊戲設計書籍
包含各種遊戲邏輯,物理學,數學,遊戲模式結構等等

Actionscript 互動多人遊戲
是在介紹線上遊戲 ,連線上的問題 , 同步與不同步解決等相關
如果你在做flash線上遊戲 要解決同步問題,瀰補時間差,一定要看這本

漏了一本,很好的書
A.D.A.M 出了一本叫"flash mx 介面呈現'
這本真的寫的太好了,如果初學者還不知道一些物件如何利用程式控制滑動加減速等相關
一定要看這本,絕對不會讓你失望!

  • 留言者: clara
  • Email:
  • 網址:
  • 日期: 2010-09-09 13:46:12
您好~我是一個剛要開始接觸學習flash和dreamweaver的新手,

想買書自學,想請教您有哪幾本書籍可以推薦參考的呢?感謝!!!




  • 留言者: clara
  • Email:
  • 網址:
  • 日期: 2010-09-21 16:44:55
您好~我主要是從事平面設計方面的工作,想增進關於網頁製作這部

份的知識學習,感謝您的回覆唷~我再來尋找適合的書籍!^ ^

flash game 國外開發資源站與教學




http://www.emanueleferonato.com/

1.內容包含作者豐富的開發遊戲資源經驗
2.開放遊戲code
3.遊戲設計的教學 (as2.0)

   是2.0 不過沒關係 看看它撰寫的邏輯 也是不錯的 !

Actionscript - 局部形變,凹凸透鏡效果





以下是凹凸透鏡效果資源教學:
http://www.emanueleferonato.com/2007/12/03/understanding-flash-displacement-map-filter/

範例載點:
http://www.emanueleferonato.com/downloads/mapping09.zip


displacement_map = new flash.filters.DisplacementMapFilter(bmp,
offset, channel1, channel2, x_mult, y_mult, mode);
bmp.draw(displace);

仔細研究一下,它主要結構是利用 flash.filters , 但邏輯物理結構是
利用灰階度變化 將要凹透形變的bg , 依據灰階度來做局部變型

Actionscript2.0,3.0 - flash 如何讀取被載入圖片JPG資訊

把圖片透過 loader 載入,並且addChild是件很容易的事, 但有網友問那要讀取被載入圖片的資訊

應該怎麼辦?



該不會直就是 _mc.width ? (假設 _mc.addChild 剛才的loader內容)

答案是否定的,不能這樣去做它!



//////////////以下提供as3.0 跟 as2.0 作法///////////////////



//as3.0 ------------

import flash.display.Loader;

var myMCL:Loader = new Loader();

var info:LoaderInfo = myMCL.contentLoaderInfo;

//AS3.0是靠LoaderInfo 變的蠻好理解!

myMCL.load(new URLRequest("01.jpg"));  



mcA.addChild(myMCL)





info.addEventListener(Event.COMPLETE,completehandler);



//記得不能心急直接讀info.width ,一定要等到info載入完整時!

function completehandler(event:Event):void{     

trace(info.width)   

}





//as2.0 ---------------------

var myMCL:MovieClipLoader = new MovieClipLoader();

myMCL.loadClip("01.jpg", mcA);  



//2.0作法就顯的麻煩,要去監聽new出來的物件 並且讀取

//跟3.0比較起來 較不好理解

var myObject:Object = new Object();  

myObject.onLoadInit = function(target:MovieClip) {

trace(target._width)

trace(target._height)

}

myMCL.addListener(myObject); 

  • 留言者: 知識+
  • Email:
  • 網址:
  • 日期: 2010-06-08 21:29:53
{

var Mc = this.product["image" + i];

loadMovie

("http://www.hidel.co.kr/main/flash00/0" + i

+ ".jpg", "Mc.img");

Mc._x = 0;

i == 1 ? (Mc._y = 1) : (Mc._y = movePos * (i -

1) + 0);

++i;

} // end while



請問以上語法如何去更改jpg圖片路徑呢?

謝謝!




  • 留言者: 知識+
  • Email:
  • 網址:
  • 日期: 2010-06-09 13:15:06
sorry 我看不懂....

您能告知它指向jpg圖片位置為何嗎?3Q




  • 留言者: carlc5lqt3h
  • Email:
  • 網址: http://lvmiss.com/
  • 日期: 2013-03-19 01:15:28
加油!加油!

精美禮品送完即止

訂購 www.Lvmiss.com

冂劳侩




  • 留言者:
  • Email:
  • 網址: http://5sisters.org/
  • 日期: 2013-03-19 07:53:03
厔唢凉



華碩多國語翻譯公司

tel:(02)2369-0931-

超低價翻譯服務:

多國語言專業翻譯,

台師大教育部長期配合,

韓文0.9日文0.8英文0.7元起!

網址:http://www.5sister.tw/



倻亭吽

Actionscript - 角度計算

角度的問題 在設計遊戲時 , 時常會用到以下情況:

1. 你的物件面朝向 滑鼠改變 而旋轉 物件角度.
2. 你的角色被敵人追著跑時 , 敵人的面向角色問題
3. 人物被日光照射的陰影,影子


如果你可以得知 一物件角度,很多事情都可以解決, 但許多時候 即使你可以決定角度 ,
你也無法決定到底要轉幾度,因為這不再是單一物件的事, 是兩物件之間的事

就如同以上例子: 敵人面向角色的問題存在


想知道 物件該旋轉幾度, 首先必要條件 , 兩物件X與Y距離 需得知.
在利用三角函數反正切餘弦求出弧度 , 許多人念高中時不知道三角函數是做什麼,
如果此時的你正在設計遊戲 ,你就會開始懷念當初高中應該認真上數學課


一個完整的圓的弧度是2π,所以2π rad = 360°,1 π rad = 180°(約57.29578°),1°=π/180
rad。以度數表示的角度,把數字乘以π/180便轉換成弧度;以弧度表示的角度,乘以180/π便轉換成度數。


角度 = 弧度 x  180/π ; //如此一來便可以計算物件旋轉角度

但 弧度是怎麼來的呢

以下是 atan2 半角公式:
<dl><dd> \operatorname{atan2} (y, x)=2 \arctan <br />\frac{y}{\sqrt{x^2+y^2}+x}.
</dd><dt>利用 arctan 計算 , 所以 tan 當然要搞清楚

</dt></dl>但在 flash 中, 你大可不必這麼麻煩 , 只要利用 Math.atan2(); 即可算出弧度

var angle:Number = Math.atan2(兩物件Y距,兩物件X距)*180/(Math.PI);
//如此便可以輕鬆算出 物件該旋轉幾度


  • 留言者: somebody1212
  • Email:
  • 網址:
  • 日期: 2010-12-01 01:25:55
我已經開始懷念高中數學了...



您好

我有在知識加發問(大富翁那題)

有看到你的留言,我覺得你教的東西對我很有幫助



所以我想請問您

我對flash不太熟...只會很基本的影格操作

如果想要做一個flash的遊戲(像是大富翁的遊戲)

是不是不太容易做成



我完全沒有程式的基礎

看到您發表的flash遊戲文章,好像是要以程式去控制物件的動態

或角度

這樣的話你比較建議我從哪裡建立基礎比較好呢?



其實...

我很想把這個大富翁形式當成5月展的畢製內容XD

只是我很怕我的能力不夠,但我願意學。



希望您給我一點建議



謝謝您。




  • 留言者: somebody1212
  • Email:
  • 網址:
  • 日期: 2010-12-01 02:30:29
不好意思~我忘了說



因為有考慮到大富翁的難度

所以我有想到99形式的小遊戲

(我想做的形式是:使用者從我準備的三個角色選其一去玩。就和我

們玩的99遊戲一樣。只是當使用者快死掉的時候,就會出現一個場

景問使用者問題,答對就免死一次然後繼續遊戲......大概是這

樣)



想請教您

和上面一篇的留言一樣,這樣的我需要從哪裡開始建構^^"



感謝~:)

My Work - 第一次 為畢業光碟 製作

高中好友 呂科(目前是位攝影師), 在某些機緣下介紹這個份外的 job .

當然了,我不是專業平面設計, 只是位業餘的設計者, 在設計過程中, 費了許多心思

如何將 flash 在我設計程度下 發揮到最大品質.







在 2008年 10月, 經過搜集各方資料匯整設計出第一份草稿!











同年又經過一個多月努力,開發出我理想中的介面!!





[2009.3]經過了風風雨雨,不斷的設計與討論溝通之下,終於完全修正符合公司理想中的版本!









班級團照,原本想走精緻路線,不過基於對像是國中小學, 還是要改變風格!











理想總是與現實作對, 原以為以動態翻書方式是最好的呈現,結果我錯了,

這麼做只會造成電腦負擔(話說現在大家經濟應該都不錯,電腦硬體也相對提升)

沒辦法, 總是有那麼幾人還停在單核... 所以說我們設計師應為廣大的群眾著想

也是我們的責任!
    這點留待以後再慢慢討論... :)

  • 留言者: Frankie
  • Email: fang_frankie@kbronet.com.tw
  • 網址:
  • 日期: 2010-08-25 00:38:56
好棒唷~好想玩玩會動的!

ActionScript3.0 - Error #1009: 無法存取 Null 物件參考的屬性或方法。

#1009: 無法存取 Null 物件參考的屬性或方法。





2012.4.13
一些遊戲時常會用到 大廳去外載遊戲進來 , 或是不論何種情況一個載體去外載swf
時常會出現一些 , 莫名的錯誤 導致載體無法正常運作 , 程式碼中斷的情況


因為載體去外載外部swf 時 , 會先載入 外部swf 的 宣告 , 接著才去載 內容(MovieClip )
仔細發現 順序似乎錯了 , 應該是 先載內容 -> 宣告 (程式) , 否則就會發生 1009 null物件 情況

解決辦法 , 如果你有以上情況 , 在製作結構時要注意 ,     把程式碼往後推一個影格    
讓場上實體物件 先載入內容 , 才去做宣告



2010.5.12

最近在替幾位網友製作一些範例時發現, 當不斷監聽下去判斷超過一個以上 IF 條件 ,此時判斷結果又跳影格

就會產生 #1009: 無法存取 Null 物件參考的屬性或方法。


如下:

if (判斷式內容1) {

假設成立  gotoAndStop();

}

if (判斷式內容2) {

假設成立  gotoAndStop();

}



#1009: 無法存取 Null 物件,本身的意義是 因為你在原影格內寫了 listener ,當你(跳)換影格時, listener不到物件內容,

導致產生錯誤. 如果listener 只是一次 那倒沒有問題 因為它只listener一次,



如果是持續不斷像是  addEventListener(Event.ENTER_FRAME   這種東西 , 那麼你的錯誤訊息就會一直跑出來煩你

因為 當你寫這段監聽時,記憶體已載入占用, 只要你一天不移除 它就會一直keep work.





所以有解決方法有兩種:



1. 在條件式 IF下 remove 掉listener ,當判斷跳影格時 ,記憶體釋放 不再listener.

    請注意當你code,有很多個listener時 記得都要 移除掉.



if (判斷式內容1) {

假設成立  gotoAndStop();

removeEventListener(Event.ENTER_FRAME,  ); //記得在判斷式完後remove

}

if (判斷式內容2) {

假設成立  gotoAndStop();

removeEventListener(Event.ENTER_FRAME,  );

}



2. 第二種方法, 非常簡單,既然你跳影格會出問題,那就不要跳了 ,乾脆直接把 code 寫在 要操作內容的上一層去遙控


if (判斷式內容1) {

_mc. gotoAndStop(); //對_mc內容做操作 語法影格並不會受影響 此時就算不remove也不會產生錯誤

}





但是請保持良好習慣, 當你有一天EventListener 越來越多時 , 效能就會降低 , ,

所以不用的listener 就將它從記憶體中移除.

GameDevelopment - 2010 名稱未定

常看到我的老媽不知道怎搞的 , 老是喜歡玩 "連連看" , 找相同的圖案 在不碰到連線情況下消去 ,
可是這樣實在太無趣 , 單純盯著螢幕找一樣的東西 , 既沒刺激感也沒有創意 , 我想唯一好處是
消磨時間 , 真不知道我媽是怎麼玩的下去 , 身為他的兒子是不是該做點什麼,........


設計圖1

這是一款操控角色移動 ,觸碰遊戲 ,必須在限時內完成條件任務
內容包含許多事件 , 敬請期待


2010 / 5 .. : 當然這不是我第一次製作Game , 2.0與3.0轉換交替 , 藉由這次全面使用
                  3.0語法,當然也遇到一些問題,鍵盤兩方向量疊合就是一大問題

2010 / 5/8 : 註冊點的問題,看來只能靠雙層movieclip來解決

Actionscript3.0- Game 鍵盤,組合鍵問題解決法

不論你在網路上搜尋那一篇談到as3.0鍵盤觸發的文章,作法都是大同小異,而且重點是 "無法產生組合鍵"
底下將描述如何 產生組合鍵邏輯

//請注意 底下程式碼已經簡化過 許多參數未提及,請參考邏輯觀念
var ddd:Array=new Array();
ddd=[0,0,0,0];
//看到陣列也許,許多網友已經知道要如何做了,沒錯我們就是要利用陣列
//產生的數列組合去選擇要做那一個action

stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);

stage.addEventListener(KeyboardEvent.KEY_UP, reportKeyUp);
//分為兩個部份DOWN負責紀錄按下,陣列紀錄為1
function reportKeyDown(event:KeyboardEvent):void {
   
    //objKeyboard.pressed=true;
    //objKeyboard.keyCode=event.keyCode;
    if (event.keyCode==37) {
        ddd[0]=1;
    }
    if (event.keyCode==39) {
        ddd[1]=1;
    }
    if (event.keyCode==38) {
        ddd[2]=1;
    }
    if (event.keyCode==40) {
        ddd[3]=1;
    }

}
//UP負責紀錄按下,陣列紀錄為0
function reportKeyUp(evt:KeyboardEvent):void {
    //objKeyboard.pressed=false;
    //objKeyboard.keyCode=null;
    if (evt.keyCode==37) {
        ddd[0]=0;
    }
    if (evt.keyCode==39) {
        ddd[1]=0;
    }
    if (evt.keyCode==38) {
        ddd[2]=0;
    }
    if (evt.keyCode==40) {
        ddd[3]=0;
    }
}

var com_ddd:String=String(ddd[0]+""+ddd[1]+ddd[2]+ddd[3]);
//將字串組合塞到switch做選擇
switch (Number(com_ddd)) {
        case 1010 :
            trace("左上"); yspeed -= power*1.3;xspeed -= power*1.3;
            break;
        case 0110 :
            trace("右上"); yspeed -= power*1.3;xspeed += power*1.3;
            break;
        case 1001 :
            trace("左下"); yspeed += power*1.3;xspeed -= power*1.3;
            break;
        case 0101 :
            trace("右下"); yspeed += power*1.3;xspeed += power*1.3;
            break;
        case 0010 :
            trace("上"); yspeed -= power*1.3;
            break;
        case 0001 :
            trace("下"); yspeed += power*1.3;
            break;
        case 1000 :
            trace("左"); xspeed -= power*1.3;
            break;
        case 0100 :
            trace("右"); xspeed += power*1.3;
            break;
}

Actionscript3.0- Game 鍵盤觸發事件

鍵盤觸發事件 , 我們以遊戲做為例子 分別是控制角色上下左右

底下分成兩部份,先介紹as2.0早期寫法 ,再為各位介紹as3.0 有3種鍵盤寫法!
( as2.0已經不推薦使用囉 )


不論那一種AS3.0寫法 以下都只能做一個事件方向的偵測 ,
兩個方向量無法同時被觸發, 意思就是當然按下 左 & 上時 它只會觸發其一,這解決方法在下一節討論



早期AS2.0寫法
//在onEnterFrame status :
   if (Key.isDown(Key.LEFT)) {

        xspeed -= power;
    }


    if (Key.isDown(Key.RIGHT)) {
        xspeed += power;
    }

   

    if (Key.isDown(Key.UP)) {
        yspeed -= power;
    }


    if (Key.isDown(Key.DOWN)) {
        yspeed -= power;
    }

     xspeed *= friction; //磨擦力
     yspeed *= friction;

    _y += yspeed;
    _x += xspeed;


AS3.0鍵盤事件寫法 , 都已改為事件監聽方法, 監聽key是否DOWN 或UP

3.0鍵盤寫法1:

stage.addEventListener(Event.ENTER_FRAME, report_loop);


//場景進入立刻 ENTER_FRAME(跟onEnterFrame同道理) 不停的跑report_loop 函數


stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);


//一開始 "場景" 監聽鍵盤是否被按下或放開事件





//該report_loop不停的被觸發 接收 keyDown 所得到的 xspeed 與 yspeed 值 來做磨擦力與物件位移

function report_loop(event:Event):void {
    xspeed*=friction;
    yspeed*=friction;
    mc.y += yspeed;
    mc.x += xspeed;
}






//當事件觸發 鍵盤按下 就觸發以下條件

function reportKeyDown(event:KeyboardEvent):void {



    if (event.keyCode==Keyboard.RIGHT) {
        xspeed+=power;
    }


    if (event.keyCode==Keyboard.LEFT) {
        xspeed-=power;
    }



    if (event.keyCode==Keyboard.UP) {
        yspeed-=power;
    }



    if (event.keyCode==Keyboard.DOWN) {
        yspeed+=power;
    }

}//keyDown






3.0鍵盤寫法2:


stage.addEventListener(Event.ENTER_FRAME, report_loop);
stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, reportKeyUp);
function reportKeyDown(event:KeyboardEvent):void {
    objKeyboard.pressed=true;
    objKeyboard.keyCode=event.keyCode;
}
function reportKeyUp(evt:KeyboardEvent): void{
 objKeyboard.pressed = false;
 objKeyboard.keyCode = null;
}


//一樣分為KEY DOWN與UP,

//不同的是,當DOWN觸發的事件內容,透過自定參數來判斷是否按下


function reportKeyUp(evt:KeyboardEvent): void{
 objKeyboard.pressed = false;
 objKeyboard.keyCode = null;
}


var power:Number=0.8;
var yspeed:Number=0;
var xspeed:Number=0;
var friction:Number=0.9;
var objKeyboard:Object;
objKeyboard={pressed:true,keyCode:null};


function report_loop(event:Event):void {
    xspeed*=friction;     yspeed*=friction;     mc.y+=yspeed;     mc.x+=xspeed;     if (objKeyboard.pressed) {  //自定參數判斷是否按下         switch (objKeyboard.keyCode) { //利用 switch 判斷key值             case 37 :                 xspeed += power;                 break;             case 39 :                 xspeed -= power;                 break;             case 38 :                 yspeed += power;                 break;             case 40 :                 yspeed -= power;                 break;         }     } }







3.0鍵盤寫法3:

//以下寫法大家想必都非常熟悉 ,很像 AS2.0 寫法
 

    if (objKeyboard.keyCode==37) {

        xspeed+=power;
    }
    if (objKeyboard.keyCode==39) {
        xspeed-=power;
    }
    if (objKeyboard.keyCode==38) {
        yspeed+=power;
    }
    if (objKeyboard.keyCode==40) {
        yspeed-=power;
    }

Actionscript - flash 呼叫 javascript 廣告縮放大小

如果我們需要從flash裡控制html網頁裡的div元素,可以用Flash呼叫Javascript的控制div隱藏或出現的function ,做法如下:



註':請注意測試時 需要把檔案放到server上進行瀏覽!



在Flash裡的button物件或movie clip鍵入:

getURL("javaScript:hideItem('div01'); javaScript:showItem('div02');");

//使用getURL 呼叫





另外在html裡裡輸入:



<script type="text/javascript">

<!--

function hideItem(div02) {hiddenID = document.getElementById(div02); hiddenID.style.display = "none";}

function showItem(div01) {shownID = document.getElementById(div01); shownID.style.display = "block";}

//-->

</script>



<div id="div01" style="display:block;">

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="150" height="100">

  <param name="movie" value="div01.swf">

  <param name="quality" value="high">

  <embed src="div01.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="150" height="100"></embed>

</object>

</div>



<div id="div02" style="display:none;>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="550" height="400">

  <param name="movie" value="div02.swf">

  <param name="quality" value="high">

  <embed src="div02.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="550" height="400"></embed>

</object>

</div>





觀看效果:http://rss2.rulingcom.com/DEMO24_JOHN/flash_js



範例下載

  • 留言者: 千
  • Email: squaresquare2001@yahoo.com.tw
  • 網址:
  • 日期: 2010-08-25 10:41:48
我是個flash新手..我有問題發問...

我套flash的模版做了一個網頁...而背景圖是連結外部的swf..然

後當我置入DW裡去..F12預覽時..發理背景圖的SWF無法顯示..只

顯示了原本的模版...請問要如何解決




  • 留言者: luannr0k5266
  • Email:
  • 網址:
  • 日期: 2013-06-25 03:41:10
%%RNDCHINESE

桃園易達嚴選汽車賣場~0918-137119~.

保證實車拍攝,絕無造假不讓您白跑一趟。

外縣市朋友來電預約,補貼您車馬費。

提供火車站、高鐵站、機場接送服務,用心讓您看的見。

來源絕對正常,里程保證、車況保證、保固及配合原廠鑑定。

請給我一個機會結交您這位朋友讓我為您服務,

本賣場車流動速度很快,請一定要先來電詢問唷。預約就送精美小禮物唷。

http://tw.myblog.yahoo.com/a87163500



e0en373t2vco2nc5

Actionscript - mailto 探討

以下都是as2.0寫法

這是基本型態
on (release) {
getURL("mailto:自己的電子信
箱");
}

加主旨
on (release) {
getURL("mailto:你想顯示文字<自己的電子信箱>?subject=你要的主旨");
}

加內文寫法
on
(release) {
getURL("mailto:你想顯示文字<自己的電子信箱>?subject=你要的主旨&
amp;
body=你要的內容");
}

需要斷行時請加  %0D%0A

on
(release) {
getURL("mailto:你想顯示文字<自己的電子信箱>?subject=你要的
主旨&body=你要的內容%0D%0A你
要的內容第二行%0D%0A你要的內容第三行");

  • 留言者: naomihsu
  • Email:
  • 網址:
  • 日期: 2010-12-18 05:56:18
那如果是as3.0呢?

ActionScript3.0 - addChild()

addChild 是呼叫 元件庫 裡元件的方法,或者可以說用as new出來的物件 要增加到場景上,就得靠addChild



1.打開元件庫 將 建立好的movieclip 對其按右鍵 "屬性" ---> 選擇  "匯給actionscript 使用"

                                                                              |

                                                                              |

                                                                              ----> 在 類別的欄位填上  Ball



  註:或是你在對物件設為元件時,也可以順便設定此項目



2.var ball_mc:Ball = new Ball(); // new 一個Ball 方法



  addChild( ball_mc ) ;     //光是new 還不夠, new 出只是一個語法 還要透過addChild 把實體物件增加到場景中



  在這裡注意 , addChild()前面不加任何東西是省略了root , 如果你想addChild 到別的movielcip



  就要改成:



  root.Sample_mc.addChild() //這裡以Sample_mc 做舉例



  接著便可以對它操控



  ball_mc.x=100;

  ball_mc.y=200;





3.當然你也可以使用迴圈 讓它一次大量產生



  var i:Number;

  for(i=1;i<20;i++){

  var ball_mc:Ball = new Ball();



  addChild( ball_mc ) ;

  ball_mc.x=100;

  ball_mc.y=200;

  }

                                                  

Actionscript 3.0 - 1120: 存取未定義的屬性 1065 , 1061呼叫未定義

1120: 存取未定義的屬性



這是AS3.0常出現的錯誤, 表示你所使用的方法 在as2.0是正確

只是因為 as3.0 嚴謹模式下 要求嚴刻的寫法 才會造成

(如果不想出現這個東西 麻煩請到 發怖設定 actionscript3.0 旁邊的"設定"

將嚴 謹模式取消
)



例子1:



你只寫 root.x1=2;  //就會產生以上錯誤訊息



(將 嚴謹模式勾掉之後就不會出現錯誤訊息)



或是將式子寫的嚴謹一些



var x1:Number;

root.x1=2;



例子2:



root.A_mc.x=1;



嚴謹寫法改為:

root[A_mc].x=1;

ReferenceError: Error #1065: 變數   未定義



語法裡呼叫變數  找不到或是命稱錯誤
譬如你在語法裡呼叫  

A_mc.addEventListener
卻出現以上訊息 表示你場景裡找不到 A_mc 這物件名稱 或是命名錯誤






1061 :呼叫可能未定義屬性





即使你在as2.0 是使用這樣的情況
_root.gotoAndStop()

在as3.0 改成
root.gotoAndStop() // 依然還是會發生錯誤



嚴謹下請改成
MovieClip(root).gotoAndStop();

  • 留言者:
  • Email:
  • 網址:
  • 日期: 2011-01-31 00:48:24
不好意思,請問一下,假設同一個檔案,程式上寫說gotoAndPlay

("編號","場景");A電腦可以執行而B電腦會發生錯誤...是那裡出

問題呢?




  • 留言者:
  • Email:
  • 網址:
  • 日期: 2012-05-31 22:23:22
又刄偁



不錯,看了就推,這是美德!

網址:http://www.callmeshop.com/investment.php

商機處處有,等您來發掘。

乽勗

ActionScript - eval( ) this[ ] 觀念

說到 eval 這是 flash4 早期版本就有的東西
因為 早期 flash 5 不能使用 eval 所以被this[ ] 方法取代

現在還會用的人 有兩種情況 很早就使用flash , 再來就是java用習慣了

我舉個例子:

_root.createEmptyMovieClip("nn"+i,
i); //以nn+i 命名建立一個movieclip
 var pp = eval("nn"+i); // nn+i 這一串東西用
pp 取代
pp._alpha=50; //意思 現在的pp 就等於  nn(字串)+i(變數)
但某些時候我們又一定
要用到 eval
for (var i = 1; i <= 3; i++) {
 setProperty(square+i+_mc, _rotation, 5);
}

//setProperty
意思 對 square+i+_mc 物件 的 _rotation(旋轉度) 設為5
//但變數擺在方法裡 以上的寫法是絕對行不通 會產生錯誤
//所
以這時候 eval 就來了  將命稱與變數包起來用


for (var i = 1; i <= 3;
i++) {
     setProperty(eval("square"+i+"_mc"), _rotation, 5);
}

當然了 沒人規定 沒有eval 就活不下去了
以我的寫法:
for (var i = 1; i <= 3; i++) {
 this["square"+i+"_mc"]._rotation = -5;
}
this["square"+i+"_mc"] //開頭以[]將變數包起來用
                       //是很重要的用法 一定要學起來

Actionscript3.0 - Slider(滑動桿,滑桿)

Slider 滑桿 在 Actionscript3.0 , 有內建的 Slider bar 可使用 ,

以下介紹 內建 Slider bar , 與 作者我自製的 Slider



----內建 Slider bar --------



import fl.controls.Slider;

import fl.events.SliderEvent;



//instantiate slider

var s:Slider = new Slider();

//position slider

s.move(50,331);

// control if slider updates instantly or after mouse is released

s.liveDragging = true;

//set size of slider

s.setSize(100,0);

//set maximum value

s.maximum = 100;

//set mininum value

s.minimum = 0;

//set tick position interval, you do not have to set this

s.tickInterval = 10;

// this is a listener that broadcasts evertime an event changes

s.addEventListener(SliderEvent.CHANGE, Change_size);

//add slider to stage

addChild(s);

//gets called on change

function Change_size(e:SliderEvent):void {

    //trace("Slider value is now: " + e.target.value);

    ALERTER.text = e.target.value;

    logo_mc.scaleX=e.target.value/30;

    logo_mc.scaleY=e.target.value/30;

}



----自製 Slider -------------------------------------------------

//設定bar初始位置

bar.x=bar_bg.x;

bar.y=bar_bg.y;

//按紐事件分為兩部份DOWN與UP ,在此注意 UP是由stage 事件觸發

bar.addEventListener(MouseEvent.MOUSE_DOWN,drag);

stage.addEventListener(MouseEvent.MOUSE_UP,stop_drag);



//當 Mouse按下bar或放開時 就觸發以下 loop

function loop(e:Event){

//以下設定 是在設定 bar 限制在bar條範圍移動

    bar.y=bar_bg.y;

    if(bar.x<=bar_bg.x)bar.x=bar_bg.x;

    if(bar.x>=bar_bg.x+bar_bg.width)bar.x=bar_bg.x+bar_bg.width

   

    //trace((bar.x-bar_bg.x)/1.24);

//將移動距離換算成%比 或是依情況自行修改間距

    logo.scaleX=(bar.x-bar_bg.x)/8;

    logo.scaleY=(bar.x-bar_bg.x)/8;

}

//bar被按下時開始拖拉

function drag(e:MouseEvent){

bar.startDrag();

addEventListener(Event.ENTER_FRAME,loop);

}

//bar即使在bar以外地方放開 一樣解除拖拉

function stop_drag(e:MouseEvent):void{

bar.stopDrag();

addEventListener(Event.ENTER_FRAME,loop);

}



範例下載 (自行將檔案副檔名改為rar)


  • 留言者: yo
  • Email: ooifp205@hotmail.com
  • 網址:
  • 日期: 2010-08-31 11:24:46
我想要下載範例可是下不下來QQ




  • 留言者: HOKO
  • Email: jjy5130@yahoo.com.tw
  • 網址:
  • 日期: 2012-05-11 00:34:40
我也想要這個範例檔

可是無法下載

請問可以寄到我信箱嗎?




  • 留言者: kristoh7k8ok
  • Email:
  • 網址: http://aaashops.com
  • 日期: 2013-04-27 03:42:16
不錯,看了就推,這是美德!

精美禮品送完即止

訂購 aaashops.com

-唖吋叿唉件

Actionscript - 物件跟隨滑鼠移動

物件跟隨滑鼠移動
那麼我們先來討問一下 數學邏輯的問題

1.首先假設 滑鼠移動 右下角  物件要跟隨滑鼠到右下角


在數學上的意義是:


  物件的座標  要與  滑鼠的座標 相同  ,物件才有可能移到滑鼠的位置
  不管是那一個方位
我們只重視座標


2.物件要移動到跟滑鼠一樣座標  就是算出其 x 與 y的差距

  你的滑鼠與 物件在 x方向 跟
y方向到底差了多少距離

  就是我們要移動的距離

  但實際上我們是 平移 或是垂直移動嗎 ? 都不是 ,我們是隨著滑鼠

直線移動過去

  相信你學過 物理 要算出斜邊 需要藉由 x 與 y方向同時組合
  產生一組方向量
當然了對flash來說 不用顧慮那麼多
  管它的 反正就是把 _x _y 量給它就是了


3. 
(_xmouse-ball._x) x的差距  與 (_ymouse-ball._y) y的差距

//請畫一個球 命名為ball
onEnterFrame=function(){
ball._x+=(_xmouse-ball._x);
ball._y+=(_ymouse-ball._y);
}


上的式子為as2.0原式, 意思就是 滑鼠到那 球就跟到那
因為 球跟滑鼠的變動量一算出變量 就把變量直接給球 造成球粘著滑鼠


們希望 漸漸的靠近 (漸漸的意思就是慢慢靠近 越來越慢)

因此我們把 (_xmouse-ball._x)每一次得到的距離都
除以某一個數
假設是4  , (_xmouse-ball._x)/4  讓每一次都以距離的1/4前進做累加

onEnterFrame=function(){
ball._x+=(_xmouse-ball._x)/4;
ball._y+=(_ymouse-ball._y)/4;
}


有任何問題歡迎來信與我討論

  • 留言者: Rolfuson
  • Email:
  • 網址:
  • 日期: 2010-11-18 00:14:34
您好~

這個方法我知道...

但是遇到這個情況:

http://rolfuson.why3s.cc/askHow.htm

的時候不知道也適不適用...

原因是因為在 xscale 和 yscale 調整時

x 和 y 的座標會變

這樣就不能定位了...




  • 留言者: Wei
  • Email:
  • 網址:
  • 日期: 2010-12-01 11:19:11
我想用3.0做出物件跟隨滑鼠移動的效果

請問有3.0的語法可以供參考嗎??




  • 留言者: Wei
  • Email:
  • 網址:
  • 日期: 2010-12-07 14:14:15
哈囉~不好意思又來打擾了..

我把語法修改後變成以下:



Stage.addEventListener(EVENT.ENTER_FRAME,

MouseMove){

ball.x+=(mouseX-ball.x)/4;

ball.y+=(mouseY-ball.y)/4;

}



結果還是有小錯誤..

不知道是不是我誤解板大的意思?!




  • 留言者: SHIRO
  • Email:
  • 網址: http://blog.xuite.net/jpshiro/way
  • 日期: 2010-12-08 19:36:31
您好~~請教一下, 如果想要當它x移動到某個值的時候就不再繼續

移動, 應該怎麼寫呢??

感謝您的技術分享!!




  • 留言者: Wei
  • Email:
  • 網址:
  • 日期: 2010-12-16 18:35:41
非常感謝大大!

已經能夠動了!!!



沒錯~對於語法感覺好像似懂非懂的學習著...

我會多讓自己磨練磨練!

感謝大大賜教XD




  • 留言者: versus11qq
  • Email: qjgkkj@yahoo.com.tw
  • 網址:
  • 日期: 2010-12-31 09:21:51
謝謝,受教嘍。

HI, 來你這逛逛喔,歡迎來我家參觀喔!醉愛名牌-名牌網購介紹~我的部落格是http://tw.myblog.yahoo.com/qwwopp-365289 歡迎參觀



gd

Actionscript3.0-碰撞偵測

在flash actionscript3.0中,碰撞方法有四種:
假若有兩物件,B1,B2

1.Object.hitTestObject(Target)
---------------------------------------------------------------------------------------
if(B1.hitTestObject(B2)){ //TestObject與TestPoint不同點在於一個是碰到物件外框,一個是物件與座標的偵測
trace("碰撞")
}else{trace("沒碰到")}

2.Object.hitTestPoint(Target)
---------------------------------------------------------------------------------------
if(B1.hitTestPoint(B2.x,B2.y,true)){  //請注意 Point部份要輸入碰撞的座標 這裡輸入B2座標
trace(" 碰撞")
}else{trace("沒碰到")}


3.自定義class,以上兩種也許都無法提供你的需求,當你想做物件精密碰撞時
   http://justfly.idv.tw/2009/05/25/Just_639.html <--可以至justBlog下載as2.0或3.0方法

---------------------------------------------------------------------------------------

if(HitTest.complexHitTestObject(hit_mc1, hit_mc2 , 5)){

trace(" 碰撞")

}else{

trace("沒碰到")

}



4.計算兩物件距離

  如果你高中數學還記得的話,在圓相交接觸的計算中,有計算到兩個圓是否接觸

  沒錯,用的就是計算兩圓心距離是否小於兩物件半逕,說到此相信你已知道該如

  做,以距離來延伸做變化.

  • 留言者: Z0912256341
  • Email:
  • 網址:
  • 日期: 2010-08-21 23:33:05
您好我是使用設定一個方塊

然後用阿法直把它變成0

那我這種碰撞方式用第一種OK嗎?

我的是2.0版本 真不好意思第一個問題忘記說了

麻煩您了




  • 留言者: seal771006
  • Email:
  • 網址:
  • 日期: 2010-09-17 16:45:09
大大您好!

有沒有元件座標隨著影格變動???

本人在碰撞偵測遇到困難...




  • 留言者:
  • Email:
  • 網址: http://tw.myblog.yahoo.com/taisan-dalofu/
  • 日期: 2012-11-07 21:25:17
兝乑兵



還行喔。

2013年生肖運勢 - 2013生肖運勢 鼠

今年屬鼠的朋友們,會較易有疲勞精神不濟的狀況,適當的放鬆身心平心靜氣,自然煩惱驟減,若不放心也可以藉由命理上的諮詢來更掌握今年的狀況哦!祝福各位新年愉快!詳細資訊請點進小房子喔!



丸厌




  • 留言者: diegoedmomed
  • Email:
  • 網址: http://wen807695.idv.tw/boardlist.asp
  • 日期: 2012-11-09 01:53:11
充呔勮

冈倢僕



謝謝,受教嘍。





有體重或便秘問題嗎?





您還在找不當的產品使用嗎?



可三餐正常飲食,不用節食或斷食的好方法喔!





輕鬆的管理您的困擾。





快上服務網站諮詢或下單喔~~





服務網站→http://wen807695.idv.tw/about.asp









刼厢

唈佑




  • 留言者: rosaliy2nd57
  • Email:
  • 網址: http://aaashops.com
  • 日期: 2013-01-13 16:02:14
仛伮刽吗儎

還不錯,加油喔,一起努力!

精美禮品送完即止

訂購網址 aaashops.com

Line帳戶 aaashops.com

請點小房子或是網址進入

偝刷勮乽侌

windows7,vista,xp 無法安裝flash player時解決方法

許多電腦本身插件管理不穩定,導致在網站自動安裝某些插件時無法順利安裝

這時候只需要下載 你想要安裝的player, 下載 執行安裝後即可

以下是flash player 10 安裝檔
http://www.mediafire.com/file/nb2lzgwmm0r/flashplayer10_install_activex_091508.exe