亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

iOS中的物理引擎

2019-11-14 19:23:38
字體:
來源:轉載
供稿:網友

目前知名的2D物理引擎有 Box2d,和Chipmunk,這些是跨平臺的。但蘋果本身也封裝了一個物理引擎, UIDynamic是從iOS 7開始引入的一種新技術,隸屬于UIKit框架。這可以讓開發人員可以在遠離物理學公式的情況下,實現炫酷的物理仿真效果。在游戲開發中會經常用到。本文主要是玩一些較淺的功能,就不說那些游戲中框架中的高級用法了。畢竟我也入門這個沒多久啊只會些簡單點的,可以用在普通應用界面中偶爾炫酷一下足矣。

如果你不是在董鉑然博客園看到本文,請點擊查看原文

主要的步驟就三步

1.創建一個物理仿真器。設置仿真范圍

2.創建相應的物理仿真行為,添加物理仿真元素

3.將物理仿真行為添加到仿真器中開始仿真。

 

懶加載方法創建 物理仿真器

- (UIDynamicAnimator *)animator{    if (!_animator) {        // 創建一個物理仿真器        _animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];    }    return _animator;}

 

模擬重力行為  UIGravityBehavior

重力行為有一個屬性是重力加速度,設置越大速度增長越快。默認是1

gravity.magnitude = 100;

 

添加元素,告訴仿真器哪些元素可以重力行為

    [gravity addItem:self.sxView];

 

簡單演示:

    // 創建重力行為    UIGravityBehavior *gravity = [[UIGravityBehavior alloc] init];    // magnitude越大,速度增長越快    gravity.magnitude = 100;    [gravity addItem:self.sxView];    // 添加到仿真器中開始仿真    [self.animator addBehavior:gravity];

 

 可以看到只是從圖中掉下,(注意這不是勻速動畫,他是模擬物體以重力加速度落下的)

 

模擬碰撞行為  UICollisionBehavior

碰撞行為需要先添加元素,告訴物理仿真器哪些元素允許碰撞。如

[collision addItem:self.sxView];

其次是設置碰撞的邊界,有個參數默認是以屏幕為邊界。

collision.translatesReferenceBoundsIntoBoundary = YES;

 

把碰撞行為和重力行為結合演示

    // 1.創建重力行為    UIGravityBehavior *gravity = [[UIGravityBehavior alloc] init];    // magnitude越大,速度增長越快    gravity.magnitude = 2;    [gravity addItem:self.sxView];        // 2.創建碰撞行為    UICollisionBehavior *collision = [[UICollisionBehavior alloc] init];    [collision addItem:self.sxView];    [collision addItem:self.bigBlock];    [collision addItem:self.smallBlock];    // 設置碰撞的邊界    collision.translatesReferenceBoundsIntoBoundary = YES;        // 3.開始仿真    [self.animator addBehavior:gravity];    [self.animator addBehavior:collision];

 

(圖中之所以那兩個控件會往上飄,是因為他們雖然都添加了碰撞行為,但是沒有添加重力行為)

如果覺得屏幕作為邊界不好,可以自己設置一條邊可以是普通的邊

[collision addBoundaryWithIdentifier:@"line2" fromPoint:CGPointMake(self.view.frame.size.width, 0) toPoint:CGPointMake(self.view.frame.size.width, 400)];

 

也可以是個貝塞爾路徑。(注意這里的路徑是不會顯示的,想要能看見得在view中畫一個和你設置的邊界一樣的圖形)

    UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:    CGRectMake(0,150, self.view.frame.size.width, self.view.frame.size.width)];    [collision addBoundaryWithIdentifier:@"circle" forPath:path];

 效果如圖

 

 模擬捕捉行為 UISnapBehavior

捕捉行為需要在創建時就給與一個點。

UISnapBehavior *snap = [[UISnapBehavior alloc] initWithItem:self.sxView snapToPoint:point];

 捕捉行為有一個防震系數屬性,設置的越大,振幅就越小

snap.damping = 1;

 因為默認只能移動一次,如果想多次移動,就在模擬仿真前清空之前的仿真器

[self.animator removeAllBehaviors];

 

結合演示,鼠標點哪,移動到哪

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{    // 1.獲得手指對應的觸摸對象    UITouch *touch = [touches anyObject];        // 2.獲得觸摸點    CGPoint point = [touch locationInView:self.view];        // 3.創建捕捉行為    UISnapBehavior *snap = [[UISnapBehavior alloc] initWithItem:self.sxView snapToPoint:point];    // 防震系數,damping越大,振幅越小    snap.damping = 1;        // 4.清空之前的并再次開始    [self.animator removeAllBehaviors];    [self.animator addBehavior:snap];}

 

 

還有一些在此就不一一演示了 頭文件都很簡單能看懂的。

UIGravityBehavior:重力行為
UICollisionBehavior:碰撞行為
UISnapBehavior:捕捉行為
UIPushBehavior:推動行為
UIAttachmentBehavior:附著行為
UIDynamicItemBehavior:動力元素行為
所有物理仿真行為都繼承自UIDynamicBehavior
所有的UIDynamicBehavior都可以獨立進行
組合使用多種行為時,可以實現一些比較復雜的效果
 
 
如果你不是在董鉑然博客園看到本文,請點擊查看原文

比如重力還可以設置重力方向,碰撞還能監聽整個碰撞過程,附著動畫類似于iOS8的iMessage短信聊天界面(上下拖動)等等,有興趣的可以自行研究,偶爾在應用中做個“撒紅包”“砸金蛋” 等動畫啥的可以用這些方法。

歡迎關注。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美视频免费在线观看| 丝袜美腿亚洲一区二区| 成人黄色片网站| 久久久久国色av免费观看性色| 色综合天天综合网国产成人网| 国产美女久久精品香蕉69| 最近2019免费中文字幕视频三| 国产日韩在线精品av| 欧美色视频日本高清在线观看| 国产色综合天天综合网| 欧美中文在线观看国产| 日韩中文字幕视频在线观看| 国产美女主播一区| 欧美黑人国产人伦爽爽爽| 欧美日韩国产精品一区二区三区四区| 91tv亚洲精品香蕉国产一区7ujn| 岛国av在线不卡| 亚洲专区在线视频| 欧美激情一区二区三级高清视频| 亚洲精品wwwww| 成人精品久久一区二区三区| 亚洲成人在线视频播放| 亚洲欧美日韩爽爽影院| 97超级碰碰人国产在线观看| 国产日韩换脸av一区在线观看| 国产亚洲精品日韩| 成人国内精品久久久久一区| 国内精品久久久久伊人av| 亚洲男人av电影| 日韩**中文字幕毛片| 日本亚洲欧美成人| 两个人的视频www国产精品| 海角国产乱辈乱精品视频| 91久久精品国产| 欧美日韩一区二区免费视频| 久久精品夜夜夜夜夜久久| 日本精品一区二区三区在线| 久久久久久久久久久91| 狠狠做深爱婷婷久久综合一区| 久久久久免费精品国产| 一道本无吗dⅴd在线播放一区| 91欧美精品成人综合在线观看| 日韩欧美亚洲成人| 日本精品一区二区三区在线| 高跟丝袜一区二区三区| 一区二区三区天堂av| 国产精品久久久久久久午夜| 国产成人一区二区三区电影| 成人免费视频xnxx.com| 欧美疯狂xxxx大交乱88av| 国产精品中文在线| 亚洲无限乱码一二三四麻| 国产精品白丝av嫩草影院| 国产精品欧美日韩久久| 亚洲图片欧洲图片av| 日韩精品视频三区| 91国产美女在线观看| 一本色道久久88综合亚洲精品ⅰ| 97香蕉久久超级碰碰高清版| 色婷婷亚洲mv天堂mv在影片| 欧美一乱一性一交一视频| 亚洲人成电影网站色www| 高清欧美性猛交xxxx| 亚洲人成电影网站色| 69精品小视频| 久久视频这里只有精品| 国产精品视频在线观看| 国产亚洲精品久久久| 亚洲性视频网址| 日韩欧美国产中文字幕| 亚洲欧洲偷拍精品| 精品二区三区线观看| 中文字幕日韩在线视频| 亚洲综合大片69999| 日本精品一区二区三区在线| 国产婷婷成人久久av免费高清| 91精品美女在线| 久久露脸国产精品| 亚洲午夜精品久久久久久久久久久久| 国产不卡av在线免费观看| 欧美美女18p| 欧美多人爱爱视频网站| 91精品国产综合久久香蕉的用户体验| 国产一区二区成人| 欧美视频裸体精品| 久久影视免费观看| 91精品国产91久久久久久| 日韩精品极品在线观看播放免费视频| 黑人巨大精品欧美一区二区免费| 日韩在线播放av| 亚洲精品国产精品国产自| 欧美成人精品激情在线观看| 91免费在线视频网站| 成人美女av在线直播| 欧美激情二区三区| 国产一区二区在线播放| 久久精品国产91精品亚洲| 美女av一区二区三区| 久久乐国产精品| 亚洲精品自在久久| 久久国产精品久久国产精品| 亚洲视频在线免费观看| 亚洲乱码一区二区| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲最大av网站| 国产欧美精品一区二区三区-老狼| 国产精品精品视频一区二区三区| 久久精品影视伊人网| 国产亚洲欧美另类中文| 久久精品国产清自在天天线| 国产精品96久久久久久又黄又硬| 久久天天躁狠狠躁夜夜av| 2019中文字幕在线观看| 日韩专区在线观看| 亚洲精品国产免费| 国产精品中文字幕在线| 欧美高清在线观看| 久久久久久久久综合| 欧美高清在线视频观看不卡| 热草久综合在线| 欧美精品videos| 亚洲精品之草原avav久久| 岛国av在线不卡| 九九精品视频在线| 亚洲欧美一区二区激情| 国产午夜精品视频免费不卡69堂| 性色av一区二区咪爱| 久久精品国产欧美亚洲人人爽| 亚洲伊人久久综合| 日本精品一区二区三区在线播放视频| 欧美老女人性视频| 久久99国产精品久久久久久久久| 亚洲成**性毛茸茸| 亚洲免费电影一区| 日韩av影片在线观看| 欧美做受高潮电影o| 91久久精品国产91性色| 欧美极品少妇xxxxⅹ免费视频| 日韩欧美国产黄色| 国产精品久久久久久久av电影| 亚洲a∨日韩av高清在线观看| 国产精品一区久久| 国产欧美欧洲在线观看| 亚洲激情小视频| 亚洲另类图片色| 日韩精品免费观看| 欧美日韩国产专区| 国产精品成人在线| 日本精品中文字幕| 色妞欧美日韩在线| 欧美激情高清视频| 欧美日韩成人精品| 亚洲午夜精品久久久久久久久久久久| 久久免费视频网站| 国产精品久久综合av爱欲tv| 久久久久国产精品www| 久久久91精品国产一区不卡| 亚洲成人网在线| 国产精品夜间视频香蕉| 欧美一级黑人aaaaaaa做受| 精品亚洲精品福利线在观看| 国产精品激情av电影在线观看| 午夜精品www| 欧美精品少妇videofree|