本發(fā)明涉及視頻技術(shù)領(lǐng)域,尤其涉及一種在flash動(dòng)畫(huà)中模擬球體運(yùn)動(dòng)的方法的及裝置。
背景技術(shù):
flash動(dòng)畫(huà)是一個(gè)矢量動(dòng)畫(huà)制作軟件,它以流式控制技術(shù)和矢量技術(shù)為核心,制作的動(dòng)畫(huà)具有短小精悍的特點(diǎn),目前,flash動(dòng)畫(huà)被廣泛的用于網(wǎng)頁(yè)設(shè)計(jì)和網(wǎng)頁(yè)動(dòng)畫(huà)制作及網(wǎng)頁(yè)視頻播放等。大多數(shù)的視頻網(wǎng)站包括直播網(wǎng)站都采用flash動(dòng)畫(huà)作為其視頻播放器,并且大多數(shù)的網(wǎng)頁(yè)游戲也會(huì)使用flash動(dòng)畫(huà)來(lái)開(kāi)發(fā),flash動(dòng)畫(huà)中一般都會(huì)使用各種各樣的動(dòng)畫(huà)來(lái)增強(qiáng)畫(huà)面的表現(xiàn)效果。其中,而對(duì)于一些物體在flash動(dòng)畫(huà)場(chǎng)景中自由落體,并且碰到其他物體會(huì)進(jìn)行反彈的效果,目前大多數(shù)都是簡(jiǎn)單的計(jì)算來(lái)模擬物體的運(yùn)動(dòng)效果,因此模擬物體的運(yùn)動(dòng)效果的真實(shí)性比較差。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例通過(guò)提供一種在flash動(dòng)畫(huà)中模擬球體運(yùn)動(dòng)的方法及裝置,解決了現(xiàn)有技術(shù)因此模擬物體的運(yùn)動(dòng)效果的真實(shí)性比較差的技術(shù)問(wèn)題。
第一方面,本發(fā)明實(shí)施例提供了一種在flash動(dòng)畫(huà)中模擬球體運(yùn)動(dòng)的方法,包括:
通過(guò)引入到flash動(dòng)畫(huà)制作工具中的二維剛體模擬物理引擎,在所述flash動(dòng)畫(huà)中創(chuàng)建物理世界;
在所述物理世界中添加動(dòng)態(tài)球?qū)嶓w,其中,針對(duì)所述動(dòng)態(tài)球?qū)嶓w創(chuàng)建有使所述動(dòng)態(tài)球?qū)嶓w在所述物理世界中進(jìn)行模擬球體運(yùn)動(dòng)的多個(gè)物理屬性參數(shù);
在所述flash動(dòng)畫(huà)中,對(duì)所述動(dòng)態(tài)球?qū)嶓w在所述物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)進(jìn)行刷新,以使所述物理世界和所述動(dòng)態(tài)球?qū)嶓w在所述物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)顯示在所述flash動(dòng)畫(huà)上。
可選的,所述通過(guò)引入到flash動(dòng)畫(huà)制作工具中的二維剛體模擬物理引擎,在所述flash動(dòng)畫(huà)中創(chuàng)建物理世界,包括:
將所述二維剛體模擬物理引擎的源代碼編譯為用于所述flash動(dòng)畫(huà)制作工具識(shí)別的swc庫(kù)文件,將編譯出的swc庫(kù)文件添加至所述flash動(dòng)畫(huà)制作工具的編譯配置中;
通過(guò)所述swc庫(kù)文件,在所述flash動(dòng)畫(huà)制作工具中創(chuàng)建針對(duì)所述物理世界的物理顯示對(duì)象;
初始化所述物理世界的重力屬性;
基于所述物理世界的重力屬性,創(chuàng)建針對(duì)所述物理世界的物理世界對(duì)象;
通過(guò)所述物理世界對(duì)象創(chuàng)建所述物理世界的包圍盒,其中,創(chuàng)建的所述物理世界的包圍盒屬于所述物理世界。
可選的,所述通過(guò)所述物理世界對(duì)象創(chuàng)建所述物理世界的包圍盒,包括:
通過(guò)所述物理世界對(duì)象創(chuàng)建所述物理世界的包圍盒的包圍盒右邊界、包圍盒左邊界、包圍盒頂面邊界和包圍盒地面邊界。
可選的,所述針對(duì)所述動(dòng)態(tài)球?qū)嶓w創(chuàng)建的物理屬性參數(shù),包括:所述動(dòng)態(tài)球?qū)嶓w的摩擦系數(shù)、尺寸、密度和反彈系數(shù)。
可選的,所述在所述flash動(dòng)畫(huà)中,對(duì)所述動(dòng)態(tài)球?qū)嶓w在所述物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)進(jìn)行刷新,包括:
基于所述物理顯示對(duì)象在所述flash動(dòng)畫(huà)中顯示所述物理世界和所述動(dòng)態(tài)球?qū)嶓w;
基于預(yù)設(shè)更新頻率對(duì)所述物理世界和所述動(dòng)態(tài)球?qū)嶓w進(jìn)行更新;
在每次對(duì)所述物理世界和所述動(dòng)態(tài)球?qū)嶓w進(jìn)行更新時(shí)同步刷新所述flash動(dòng)畫(huà),以對(duì)所述動(dòng)態(tài)球?qū)嶓w在所述物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)進(jìn)行刷新。
第二方面,本發(fā)明實(shí)施例提供了一種在flash動(dòng)畫(huà)中模擬球體運(yùn)動(dòng)的裝置,包括:
物理世界創(chuàng)建單元,用于通過(guò)引入到flash動(dòng)畫(huà)制作工具中的二維剛體模擬物理引擎,在所述flash動(dòng)畫(huà)中創(chuàng)建物理世界;
球體添加單元,用于在所述物理世界中添加動(dòng)態(tài)球?qū)嶓w,其中,針對(duì)所述動(dòng)態(tài)球?qū)嶓w創(chuàng)建有使所述動(dòng)態(tài)球?qū)嶓w在所述物理世界中進(jìn)行模擬球體運(yùn)動(dòng)的多個(gè)物理屬性參數(shù);
刷新單元,用于在所述flash動(dòng)畫(huà)中,對(duì)所述動(dòng)態(tài)球?qū)嶓w在所述物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)進(jìn)行刷新,以使所述物理世界和所述動(dòng)態(tài)球?qū)嶓w在所述物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)顯示在所述flash動(dòng)畫(huà)上。
可選的,所述物理世界創(chuàng)建單元,包括:
編譯子單元,用于將所述二維剛體模擬物理引擎的源代碼編譯為用于所述flash動(dòng)畫(huà)制作工具識(shí)別的swc庫(kù)文件,將編譯出的swc庫(kù)文件添加至所述flash動(dòng)畫(huà)制作工具的編譯配置中;
顯示對(duì)象創(chuàng)建子單元,用于通過(guò)所述swc庫(kù)文件,在所述flash動(dòng)畫(huà)制作工具中創(chuàng)建針對(duì)所述物理世界的物理顯示對(duì)象;
重力初始化子單元,用于初始化所述物理世界的重力屬性;
物理世界對(duì)象創(chuàng)建子單元,用于基于所述物理世界的重力屬性,創(chuàng)建針對(duì)所述物理世界的物理世界對(duì)象;
包圍盒創(chuàng)建子單元,用于通過(guò)所述物理世界對(duì)象創(chuàng)建所述物理世界的包圍盒,其中,創(chuàng)建的所述物理世界的包圍盒屬于所述物理世界。
可選的,所述包圍盒創(chuàng)建子單元,具體用于:
通過(guò)所述物理世界對(duì)象創(chuàng)建所述物理世界的包圍盒的包圍盒右邊界、包圍盒左邊界、包圍盒頂面邊界和包圍盒地面邊界。
可選的,所述針對(duì)所述動(dòng)態(tài)球?qū)嶓w創(chuàng)建的物理屬性參數(shù),包括:所述動(dòng)態(tài)球?qū)嶓w的摩擦系數(shù)、尺寸、密度和反彈系數(shù)。
可選的,所述刷新單元,包括:
顯示子單元,用于基于所述物理顯示對(duì)象在所述flash動(dòng)畫(huà)中顯示所述物理世界和所述動(dòng)態(tài)球?qū)嶓w;
運(yùn)動(dòng)更新子單元,用于基于預(yù)設(shè)更新頻率對(duì)所述物理世界和所述動(dòng)態(tài)球?qū)嶓w進(jìn)行更新;
動(dòng)畫(huà)刷新子單元,用于在每次對(duì)所述物理世界和所述動(dòng)態(tài)球?qū)嶓w進(jìn)行更新時(shí)同步刷新所述flash動(dòng)畫(huà),以對(duì)所述動(dòng)態(tài)球?qū)嶓w在所述物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)進(jìn)行刷新。
本發(fā)明實(shí)施例中提供的一個(gè)或多個(gè)技術(shù)方案,至少具有如下技術(shù)效果或優(yōu)點(diǎn):
由于采用了通過(guò)引入到flash動(dòng)畫(huà)制作工具中的二維剛體模擬物理引擎在flash動(dòng)畫(huà)中創(chuàng)建物理世界;在物理世界中添加的動(dòng)態(tài)球?qū)嶓w創(chuàng)建有多個(gè)物理屬性參數(shù),使得動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行模擬運(yùn)動(dòng);在flash動(dòng)畫(huà)中對(duì)動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)進(jìn)行刷新,以使物理世界和動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)顯示在flash動(dòng)畫(huà)上,從而實(shí)現(xiàn)了在flash動(dòng)畫(huà)中模擬球在真實(shí)的物理世界運(yùn)動(dòng)的動(dòng)畫(huà)效果,比簡(jiǎn)單計(jì)算來(lái)模擬球體運(yùn)動(dòng)更逼真。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例在flash動(dòng)畫(huà)中模擬球體運(yùn)動(dòng)的方法流程圖;
圖2為創(chuàng)建的物理世界和動(dòng)態(tài)球?qū)嶓w的示意圖;
圖3a~圖3b為動(dòng)態(tài)球?qū)嶓w在物理世界的運(yùn)動(dòng)示意圖;
圖4本發(fā)明實(shí)施例在flash動(dòng)畫(huà)中模擬球體運(yùn)動(dòng)的裝置模塊圖。
具體實(shí)施方式
本發(fā)明實(shí)施例通過(guò)提供一種在flash動(dòng)畫(huà)中模擬球體運(yùn)動(dòng)的方法及裝置,解決了現(xiàn)有技術(shù)因此模擬物體的運(yùn)動(dòng)效果的真實(shí)性比較差的技術(shù)問(wèn)題。
本發(fā)明實(shí)施例的技術(shù)方案為解決上述技術(shù)問(wèn)題,總體思路如下:
通過(guò)flash動(dòng)畫(huà)制作工具中的二維剛體模擬物理引擎在flash動(dòng)畫(huà)中創(chuàng)建物理世界;在物理世界中添加的動(dòng)態(tài)球?qū)嶓w創(chuàng)建有多個(gè)物理屬性參數(shù),使得動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行模擬運(yùn)動(dòng);在flash動(dòng)畫(huà)中對(duì)動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)進(jìn)行刷新,以使物理世界和動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)顯示在flash動(dòng)畫(huà)上,從而實(shí)現(xiàn)了在flash動(dòng)畫(huà)中模擬球在真實(shí)的物理世界運(yùn)動(dòng)的動(dòng)畫(huà)效果,比簡(jiǎn)單計(jì)算來(lái)模擬球體運(yùn)動(dòng)更逼真。
參考圖1所示,本發(fā)明實(shí)施例提供的一種在flash動(dòng)畫(huà)中模擬球體運(yùn)動(dòng)的方法,包括如下步驟:
s101、通過(guò)引入到flash動(dòng)畫(huà)制作工具中的二維剛體模擬物理引擎,在flash動(dòng)畫(huà)中創(chuàng)建物理世界;
s102、在物理世界中添加動(dòng)態(tài)球?qū)嶓w,其中,針對(duì)動(dòng)態(tài)球?qū)嶓w創(chuàng)建有使動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行模擬球體運(yùn)動(dòng)的多個(gè)物理屬性參數(shù);
s103、在flash動(dòng)畫(huà)中,對(duì)動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)進(jìn)行刷新,以使物理世界和動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)顯示在flash動(dòng)畫(huà)上。
需要說(shuō)明的是,在本發(fā)明實(shí)施例中,二維剛體模擬物理引擎可以為box2d物理引擎。flash動(dòng)畫(huà)制作工具為交互式動(dòng)畫(huà)設(shè)計(jì)工具。flash動(dòng)畫(huà)由該flash動(dòng)畫(huà)制作工具制作而成。
下面,結(jié)合圖1對(duì)本發(fā)明實(shí)施例提供的在flash動(dòng)畫(huà)中模擬球體運(yùn)動(dòng)的方法的每個(gè)步驟進(jìn)行詳細(xì)描述:
首先,執(zhí)行s101:通過(guò)引入到flash動(dòng)畫(huà)制作工具中的二維剛體模擬物理引擎,在flash動(dòng)畫(huà)中創(chuàng)建物理世界。
s101包括,首先,在flash動(dòng)畫(huà)制作工具中引入二維剛體模擬物理引擎。而在flash動(dòng)畫(huà)制作工具中引入二維剛體模擬物理引擎,具體為:將所述二維剛體模擬物理引擎的源代碼編譯為用于所述flash動(dòng)畫(huà)制作工具識(shí)別的swc庫(kù)文件,將編譯出的swc庫(kù)文件添加至flash動(dòng)畫(huà)制作工具的編譯配置中。
以box2d物理引擎為例,將box2d物理引擎的源代碼加入到flash動(dòng)畫(huà)制作工具的代碼編譯環(huán)境中,在flash動(dòng)畫(huà)制作工具的編譯配置中,box2d物理引擎的源代碼編譯成flash動(dòng)畫(huà)制作工具可執(zhí)行的swc庫(kù)文件。編譯完成后,在flash動(dòng)畫(huà)制作工具中,則通過(guò)box2d物理引擎的進(jìn)入口來(lái)引入由box2d物理引擎的源代碼已經(jīng)編譯成的swc庫(kù)文件,使得flash動(dòng)畫(huà)制作工具可以使用box2d物理引擎的所有接口及組件。
需要說(shuō)明的是,flash動(dòng)畫(huà)制作工具的編譯配置為makefile,是定義編譯代碼的規(guī)則和配置文件。box2d物理引擎的進(jìn)入口標(biāo)示為importbox2d。
接著,通過(guò)由二維剛體模擬物理引擎的源代碼已經(jīng)編譯成的swc庫(kù)文件,在flash動(dòng)畫(huà)制作工具中創(chuàng)建針對(duì)物理世界的物理顯示對(duì)象。需要說(shuō)明的是,物理顯示對(duì)象用于將物理世界和物理世界中的動(dòng)態(tài)球?qū)嶓w顯示在flash動(dòng)畫(huà)中。
具體的,針對(duì)box2d物理引擎,動(dòng)態(tài)球?qū)嶓w放在box2d物理引擎的box2dshow類(lèi)的成員變量中,以將該動(dòng)態(tài)球?qū)嶓w添加到物理世界中。
需要說(shuō)明的是,在本發(fā)明實(shí)施例中,box2dshow類(lèi)繼承自物理顯示對(duì)象(即:sprite對(duì)象),box2dshow類(lèi)實(shí)例化的動(dòng)態(tài)球?qū)嶓w加載到flash動(dòng)畫(huà)中進(jìn)行顯示。而sprite對(duì)象來(lái)自flash動(dòng)畫(huà)的actionscript的script類(lèi)。
再接著,初始化物理世界的重力屬性:
具體的,初始化物理世界的重力屬性包括:初始化包括物理世界的重力方向和重力大小。具體的,初始化的重力方向?yàn)樗竭\(yùn)動(dòng)為0,垂直運(yùn)動(dòng)為向下的10,具體實(shí)現(xiàn)方式為:
vargravity:b2vec2=b2vec2.create()
gravity.set(0.0,-10.0)。
當(dāng)然,還可以包括初始化物理世界的尺寸。
再接著,基于物理世界的重力屬性,創(chuàng)建針對(duì)物理世界的物理世界對(duì)象:
varworld:b2world=b2world.create(gravity)
其中,b2world表示物理世界,創(chuàng)建完物理世界對(duì)象后,則需要?jiǎng)?chuàng)建物理世界的包圍盒,以表示物理世界的邊界范圍。需要說(shuō)明的是,創(chuàng)建的物理世界的包圍盒屬于物理世界。
具體的,結(jié)合圖2所示,通過(guò)物理世界對(duì)象創(chuàng)建物理世界的包圍盒的包圍盒右邊界r、包圍盒左邊界l、包圍盒頂面邊界t和包圍盒地面邊界b。
下面對(duì)創(chuàng)建物理世界的包圍盒的實(shí)施方式進(jìn)行詳細(xì)說(shuō)明:
具體的,1、通過(guò)定義多邊形來(lái)確定創(chuàng)建了一個(gè)包括包圍盒右邊界r、包圍盒左邊界l、包圍盒頂面邊界t和包圍盒地面邊界b共4個(gè)平面的包圍盒;2、創(chuàng)建一個(gè)針對(duì)物理世界的包圍盒的剛體定義;3、創(chuàng)建一個(gè)針對(duì)物理世界的包圍盒的剛體。
比如,通過(guò)varwall:b2polygonshape=newb2polygonshape()方法定義一個(gè)多邊形的變量。通過(guò)varwallbd:b2bodydef=newb2bodydef()方法定義一個(gè)針對(duì)物理世界的包圍盒的剛體定義的變量,再通過(guò)varwallb:b2body方法定義一個(gè)針對(duì)物理世界的包圍盒的剛體的變量。
則創(chuàng)建物理世界的包圍盒左邊界l的代碼實(shí)現(xiàn)為:
varwall:b2polygonshape=newb2polygonshape();
varwallbd:b2bodydef=newb2bodydef();
varwallb:b2body;
wallbd.position.set(xx,xx);
wall.setasbox(xx,xx);
wallb=world.createbody(wallbd);
wallb.createfixture2(wall);
其中,創(chuàng)建物理世界的包圍盒左邊界l的代碼中,使用的world對(duì)象就是物理世界對(duì)象,通過(guò)物理世界對(duì)象創(chuàng)建的剛體均屬于物理世界,因此,創(chuàng)建的物理世界的包圍盒左邊界l屬于物理世界,通過(guò)調(diào)用position.set()函數(shù)設(shè)定包圍盒左邊界l的位置、調(diào)用setasbox()設(shè)定包圍盒左邊界l的設(shè)定邊框之后,通過(guò)調(diào)用createbody()函數(shù)創(chuàng)建針對(duì)包圍盒左邊界l的剛體,以及通過(guò)調(diào)用createfixture2()創(chuàng)建針對(duì)包圍盒左邊界l的夾具,用于將包圍盒左邊界l的形狀綁定到針對(duì)包圍盒左邊界l創(chuàng)建的剛體上。
在本發(fā)明實(shí)施例中,一個(gè)針對(duì)物理世界的包圍盒的剛體定義(b2bodydef)可以用于來(lái)創(chuàng)建多個(gè)剛體,則各個(gè)變量在后續(xù)創(chuàng)建包圍盒右邊界r、包圍盒頂面邊界t和包圍盒地面邊界b時(shí)共用。因此,創(chuàng)物理世界的包圍盒右邊界r通過(guò)如下代碼實(shí)現(xiàn):
wallbd.position.set(xx,xx);
wallb=world.createbody(wallbd);
wallb.createfixture2(wall);
其中,創(chuàng)建物理世界的包圍盒右邊界r的代碼中:通過(guò)調(diào)用position.set()函數(shù)設(shè)定包圍盒右邊界r的位置、調(diào)用setasbox()設(shè)定包圍盒右邊界r的設(shè)定邊框之后,通過(guò)調(diào)用createbody()函數(shù)創(chuàng)建針對(duì)包圍盒右邊界r的剛體,以及通過(guò)調(diào)用createfixture2()創(chuàng)建針對(duì)包圍盒右邊界r的夾具,以將包圍盒右邊界r的形狀綁定到針對(duì)包圍盒右邊界r創(chuàng)建的剛體上。
具體的,創(chuàng)建針對(duì)物理世界的包圍盒頂面邊界t,具體通過(guò)如下代碼實(shí)現(xiàn):
wallbd.position.set(xx,xx);
wall.setasbox(xx,xx);
wallb=world.createbody(wallbd);
其中,創(chuàng)建物理世界的包圍盒頂面邊界t的代碼中:通過(guò)調(diào)用position.set()函數(shù)設(shè)定包圍盒頂面邊界t的位置、調(diào)用setasbox()設(shè)定包圍盒頂面邊界t的設(shè)定邊框之后,通過(guò)調(diào)用createbody()函數(shù)創(chuàng)建針對(duì)包圍盒頂面邊界t的剛體,以及通過(guò)調(diào)用createfixture2()創(chuàng)建針對(duì)包圍盒頂面邊界t的夾具,以將包圍盒頂面邊界t的形狀綁定到針對(duì)包圍盒頂面邊界t創(chuàng)建的剛體上。
具體的,創(chuàng)建針對(duì)物理世界的包圍盒地面邊界b,具體通過(guò)如下代碼實(shí)現(xiàn):
wallb.createfixture2(wall);
wallbd.position.set(xx,xx);
wallb=world.createbody(wallbd);
wallb.createfixture2(wall);
其中,創(chuàng)建物理世界的包圍盒地面邊界b的代碼中:通過(guò)調(diào)用position.set()函數(shù)設(shè)定包圍盒地面邊界b的位置、調(diào)用setasbox()設(shè)定包圍盒地面邊界b的設(shè)定邊框之后,通過(guò)調(diào)用createbody()函數(shù)創(chuàng)建針對(duì)包圍盒地面邊界的剛體,以及通過(guò)調(diào)用createfixture2()創(chuàng)建針對(duì)包圍盒地面邊界b的夾具,以將包圍盒地面邊界b的形狀綁定到針對(duì)包圍盒地面邊界b創(chuàng)建的剛體上。
接著,執(zhí)行s102:在物理世界中添加動(dòng)態(tài)球?qū)嶓w,其中,針對(duì)動(dòng)態(tài)球?qū)嶓w創(chuàng)建有使動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行模擬球體運(yùn)動(dòng)的多個(gè)物理屬性參數(shù)。
具體的,創(chuàng)建的物理屬性參數(shù)包括:動(dòng)態(tài)球?qū)嶓w的摩擦系數(shù)、尺寸、密度、反彈系數(shù)。
創(chuàng)建動(dòng)態(tài)球?qū)嶓w及創(chuàng)建動(dòng)態(tài)球?qū)嶓w的物理屬性參數(shù),具體為:通過(guò)newb2circledef()函數(shù)創(chuàng)建動(dòng)態(tài)球物理對(duì)象(即:circledef),用于定義動(dòng)態(tài)球?qū)嶓w,通過(guò)circledef.radius設(shè)定動(dòng)態(tài)球?qū)嶓w的半徑,circledef.friction設(shè)定動(dòng)態(tài)球?qū)嶓w的摩擦系數(shù),circledef.density設(shè)定動(dòng)態(tài)球?qū)嶓w的密度,circledef.restitution設(shè)定動(dòng)態(tài)球?qū)嶓w的反彈系數(shù)。通過(guò)調(diào)用m_world.createbody()函數(shù)創(chuàng)建動(dòng)態(tài)球?qū)嶓w的剛體,通過(guò)調(diào)用body.createshape()函數(shù)創(chuàng)建動(dòng)態(tài)球?qū)嶓w的圖形。創(chuàng)建的動(dòng)態(tài)球?qū)嶓w的圖形參考圖2中所示的g。
具體的實(shí)現(xiàn)代碼為:
circledef=newb2circledef();
circledef.radius=2;
circledef.friction=0.5;
circledef.density=1.0;
circledef.restitution=0.2;
body=world.createbody(bodydef);
body.createshape(circledef);
需要說(shuō)明的是,本發(fā)明不限制動(dòng)態(tài)球?qū)嶓w的半徑、摩擦系數(shù)、密度、反彈系數(shù)的具體數(shù)值,本文所公開(kāi)的各個(gè)物理屬性參數(shù)的數(shù)值僅僅用于舉例說(shuō)明,但是不用于限制本發(fā)明,可以根據(jù)實(shí)際需求創(chuàng)建小于動(dòng)態(tài)球?qū)嶓w,創(chuàng)建的動(dòng)態(tài)球?qū)嶓w的尺寸小于物理世界的尺寸。
s102之后,接著s103:在flash動(dòng)畫(huà)中,對(duì)動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)進(jìn)行刷新,以使物理世界和動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)顯示在flash動(dòng)畫(huà)上。
基于物理顯示對(duì)象在flash動(dòng)畫(huà)中顯示物理世界和動(dòng)態(tài)球?qū)嶓w;基于預(yù)設(shè)更新頻率對(duì)物理世界和動(dòng)態(tài)球?qū)嶓w進(jìn)行更新;在每次對(duì)物理世界和動(dòng)態(tài)球?qū)嶓w進(jìn)行更新時(shí)同步刷新flash動(dòng)畫(huà),以對(duì)動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)進(jìn)行刷新,從而實(shí)現(xiàn)形成了參考圖3a~圖3b所示的動(dòng)態(tài)球?qū)嶓w在物理世界的運(yùn)動(dòng)效果:圖3a所示為動(dòng)態(tài)球?qū)嶓w從創(chuàng)建位置1開(kāi)始下落,依次經(jīng)過(guò)位置2、位置3、位置4、位置5、位置6、位置7、在位置8處與包圍盒地面邊界b碰撞,參考圖3b所示,在位置8處反向后,進(jìn)行向上運(yùn)動(dòng)會(huì)依次經(jīng)過(guò)位置9、位置10、位置11、位置12后再次下落,位置12低于位置1的高度,動(dòng)態(tài)球?qū)嶓w多次反彈碰撞后停止在8位置,刷新flash動(dòng)畫(huà)展示了這種動(dòng)態(tài)球?qū)嶓w在物理世界的運(yùn)動(dòng)效果。
具體的,通過(guò)將物理世界的更新和動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)的更新放到box2dshow類(lèi)的場(chǎng)景更新中,使得物理世界更新一次和動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)更新一次,則同步的flash動(dòng)畫(huà)刷新一次。
則需要不斷的去更新物理世界和動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng),因此,基于預(yù)設(shè)更新頻率對(duì)物理世界和動(dòng)態(tài)球?qū)嶓w進(jìn)行更新,每更新一次就相當(dāng)于物理世界中的動(dòng)態(tài)球?qū)嶓w發(fā)生一次運(yùn)動(dòng)。flash動(dòng)畫(huà)就對(duì)應(yīng)的刷新一次。更新的頻率越高則場(chǎng)景越流暢。
具體的,通過(guò)則調(diào)用如下方法更新物理世界和動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng):
world.step(timestep,iterations);
其中,step接口為物理世界對(duì)象的接口。其中,在前的參數(shù)timestep標(biāo)示每次的更新時(shí)間步,在本發(fā)明實(shí)施例中,更新時(shí)間步使用用60分之1秒,在后參數(shù)iterations標(biāo)示一個(gè)時(shí)間步的迭代次數(shù),在本發(fā)明實(shí)施例中,一個(gè)時(shí)間步的迭代次數(shù)可以為10次,則更新物理世界和動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)的代碼具體為:
world.step(1.0f/60.0f,10);
基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例提供了一種在flash動(dòng)畫(huà)中模擬球體運(yùn)動(dòng)的裝置,參考圖4所示,包括:
物理世界創(chuàng)建單元201,用于通過(guò)引入到flash動(dòng)畫(huà)制作工具中的二維剛體模擬物理引擎,在flash動(dòng)畫(huà)中創(chuàng)建物理世界;
球體添加單元202,用于在物理世界中添加動(dòng)態(tài)球?qū)嶓w,其中,針對(duì)動(dòng)態(tài)球?qū)嶓w創(chuàng)建有使動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行模擬球體運(yùn)動(dòng)的多個(gè)物理屬性參數(shù);
刷新單元203,用于在flash動(dòng)畫(huà)中,對(duì)動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)進(jìn)行刷新,以使物理世界和動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)顯示在flash動(dòng)畫(huà)上。
可選的,物理世界創(chuàng)建單元201,包括:
編譯子單元,用于將所述二維剛體模擬物理引擎的源代碼編譯為用于所述flash動(dòng)畫(huà)制作工具識(shí)別的swc庫(kù)文件,將編譯出的swc庫(kù)文件添加至flash動(dòng)畫(huà)制作工具的編譯配置中;
顯示對(duì)象創(chuàng)建子單元,用于通過(guò)swc庫(kù)文件,在flash動(dòng)畫(huà)制作工具中創(chuàng)建針對(duì)物理世界的物理顯示對(duì)象;
重力初始化子單元,用于初始化物理世界的重力屬性;
物理世界對(duì)象創(chuàng)建子單元,用于基于物理世界的重力屬性,創(chuàng)建針對(duì)物理世界的物理世界對(duì)象;
包圍盒創(chuàng)建子單元,用于通過(guò)物理世界對(duì)象創(chuàng)建物理世界的包圍盒,其中,創(chuàng)建的物理世界的包圍盒屬于物理世界。
可選的,包圍盒創(chuàng)建子單元,具體用于:
通過(guò)物理世界對(duì)象創(chuàng)建物理世界的包圍盒的包圍盒右邊界、包圍盒左邊界、包圍盒頂面邊界和包圍盒地面邊界。
可選的,針對(duì)動(dòng)態(tài)球?qū)嶓w創(chuàng)建的物理屬性參數(shù),包括:動(dòng)態(tài)球?qū)嶓w的摩擦系數(shù)、尺寸、密度和反彈系數(shù)。
可選的,刷新單元203,包括:
顯示子單元,用于基于物理顯示對(duì)象在flash動(dòng)畫(huà)中顯示物理世界和動(dòng)態(tài)球?qū)嶓w;
運(yùn)動(dòng)更新子單元,用于基于預(yù)設(shè)更新頻率對(duì)物理世界和動(dòng)態(tài)球?qū)嶓w進(jìn)行更新;
動(dòng)畫(huà)刷新子單元,用于在每次對(duì)物理世界和動(dòng)態(tài)球?qū)嶓w進(jìn)行更新時(shí)同步刷新flash動(dòng)畫(huà),以對(duì)動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)進(jìn)行刷新。
由于本實(shí)施例所介紹的裝置為實(shí)施本發(fā)明實(shí)施例中在flash動(dòng)畫(huà)中模擬球體運(yùn)動(dòng)的方法所采用的裝置,故而基于本發(fā)明實(shí)施例中所介紹的在flash動(dòng)畫(huà)中模擬球體運(yùn)動(dòng)的方法,本領(lǐng)域所屬技術(shù)人員能夠了解本實(shí)施例的裝置的具體實(shí)施方式以及其各種變化形式,所以在此對(duì)于該裝置如何實(shí)現(xiàn)本發(fā)明實(shí)施例中的方法不再詳細(xì)介紹。只要本領(lǐng)域所屬技術(shù)人員實(shí)施本發(fā)明實(shí)施例中信息處理的方法所采用的裝置,都屬于本發(fā)明所欲保護(hù)的范圍。
上述本發(fā)明實(shí)施例中的技術(shù)方案,至少具有如下的技術(shù)效果或優(yōu)點(diǎn):
由于采用了通過(guò)引入到flash動(dòng)畫(huà)制作工具中的二維剛體模擬物理引擎在flash動(dòng)畫(huà)中創(chuàng)建物理世界;在物理世界中添加的動(dòng)態(tài)球?qū)嶓w創(chuàng)建有多個(gè)物理屬性參數(shù),使得動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行模擬運(yùn)動(dòng);在flash動(dòng)畫(huà)中對(duì)動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)進(jìn)行刷新,以使物理世界和動(dòng)態(tài)球?qū)嶓w在物理世界中進(jìn)行的模擬球體運(yùn)動(dòng)顯示在flash動(dòng)畫(huà)上,從而實(shí)現(xiàn)了在flash動(dòng)畫(huà)中模擬球在真實(shí)的物理世界運(yùn)動(dòng)的動(dòng)畫(huà)效果,比簡(jiǎn)單計(jì)算來(lái)模擬球體運(yùn)動(dòng)更逼真。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤(pán)存儲(chǔ)器、cd-rom、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專(zhuān)用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
盡管已描述了本發(fā)明的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。