日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flash 与物理笔记:简单的小球重力模拟

發布時間:2025/6/17 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flash 与物理笔记:简单的小球重力模拟 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?? 物理是一個很有趣的東西,flash 結合物理是其中一個很重要的方向,也是學習flash技術一個很重要的門。最近翻閱一些資料,復習了一下物理和flash技術,雖然是一點皮毛的東西,不過先把他記錄下來。為日后需要作一個基礎,下面我們采用小球模擬重力,但是本身沒有涉及到質量,沒有涉及到球與球之間的碰撞,這樣可操作性會簡單一些,容易掌握,重力結合當中。在Make thing move 一書當中,這本書已經講解得很深入,它有碰撞,和能量損失等模擬。可以參考這本書,不過既然初學的,先簡單的一些好。自己本身物理知識還在惡補當中。只能一點一點來。

重力模擬,只要技巧在于加速度和位移是怎樣結合起來。我們知道在每一幀刷新的時候,不斷執行

(物體.y+=值)。物體就會一直向下移動。

(物體的垂直速度vy+=g)加上一個重力加速度,使物體在vy垂直方向的速度有了一個額外的遞增值,因此vy值會不斷增加

從而物體.y 的值會發生變化,其實flash 里面隱含了一個時間概念。每一幀其實有一個時間間隔,這樣這個隱含的時候就會無形加上去了

速度公式:vt=v0+at(其中v0為初始速度,t為時間)

位移的公式:s=v0t + 1/2at^2 (其中v0為初始速度,a為加速度,t為時間);

這樣的組合方式

vy+=a;

物體.y+=vy;

就能夠產生位移變化。(該公式可以在make thing move 找到)

下面就是模擬出一些小球進行,小球采用繪圖api來模擬出來。

private function creatBalls(num:int):void 創建一系列的小球

其中:我們加入了阻力去模擬,效果會更加好,小球受到空氣阻力,因此落體的時候會發生速度遞減。

??? list[i].vy+=g;//加速度加上向下的垂直速度
????list[i].vy*=friction;//阻力
????list[i].y+=list[i].vy;// s=vt;

這里就是關鍵的地方,不是很難,因為沒有涉及到質量和球與球之間碰撞,這部分資料很多,可以去找找。我發現到這部分知識,對一個flash 愛好者來講,是需要去了解和掌握的。這樣就能夠創造很多有趣的flash,而最近搜索資料的時候,發覺國外日本和美國那邊的flash 都很注重數學和物理方面的培養結合,這樣創造出來的flash 來講才會有說服力。效果更加好。這部分知識,自己覺得需要慢慢補上,畢竟物理不是很好需要翻閱資料閱讀。所以這部分慢慢努力。

package { //簡單小球重力模擬 import flash.display.Sprite; import flash.events.*; public class Main extends Sprite { private var g:Number=1;//重力 private var friction:Number=0.98;//空氣阻力 private var contain:Sprite=new Sprite();//容器 private var list:Array=new Array(); public function Main() { init(); } private function init():void { addChild(contain); creatBalls(20);//創建20個小球 addEventListener(Event.ENTER_FRAME,Run); var btn:MyButton=new MyButton();//創建按鈕 btn.x=400; btn.y=50; btn.addEventListener(MouseEvent.MOUSE_DOWN,onDownHandler); addChild(btn); } private function onDownHandler(event:MouseEvent):void { while(list.length>0)list.pop(); while(contain.numChildren>0)contain.removeChildAt(0); creatBalls(20);//創建小球 } //創建球體 private function creatBalls(num:int):void { for (var i:int=0; i<num; i++) { var ball:Ball=new Ball(Math.random()*30+10,0xffffff *Math.random()); ball.x=Math.random()*500; ball.y=0; ball.vy=Math.random()*10;//不同的初速度 contain.addChild(ball); list.push(ball); } } private function Run(event:Event):void { for (var i:int=0; i<list.length; i++) { list[i].vy+=g;//加速度加上向下的垂直速度 list[i].vy*=friction;//阻力 list[i].y+=list[i].vy;// s=vt; if (list[i].y+list[i].height/2>stage.stageHeight) { list[i].y=stage.stageHeight-list[i].height/2; list[i].vy*=-1; } } } } } //模擬的小球 import flash.display.Sprite; class Ball extends Sprite { public var vy:Number=0; public var vx:Number=0; function Ball(r:int,color:uint) { this.graphics.lineStyle(1); this.graphics.beginFill(color); this.graphics.drawCircle(0,0,r); this.graphics.endFill(); this.x=-this.width/2; this.y=-this.height/2; } } import flash.display.Sprite; import flash.text.TextField; //按鈕 class MyButton extends Sprite { function MyButton() { this.graphics.lineStyle(1); this.graphics.beginFill(0xffff00); this.graphics.drawRect(0,0,60,20); this.graphics.endFill(); var txt:TextField=new TextField(); txt.text="RePlay"; txt.x=10; txt.y=2; txt.mouseEnabled=false; addChild(txt); } }

轉載于:https://www.cnblogs.com/guoyiqi/archive/2010/02/20/2069211.html

總結

以上是生活随笔為你收集整理的Flash 与物理笔记:简单的小球重力模拟的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。