打磚塊代碼和開(kāi)發(fā)游戲_第1頁(yè)
打磚塊代碼和開(kāi)發(fā)游戲_第2頁(yè)
打磚塊代碼和開(kāi)發(fā)游戲_第3頁(yè)
打磚塊代碼和開(kāi)發(fā)游戲_第4頁(yè)
打磚塊代碼和開(kāi)發(fā)游戲_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余63頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

打磚塊游戲講師:劉凡技術(shù)博客:課程目標(biāo)用3~4個(gè)小時(shí)實(shí)現(xiàn)簡(jiǎn)單的打磚塊游戲適合人群有一些OC基礎(chǔ),能看懂OC語(yǔ)法即可!游戲規(guī)則屏幕上方有四排磚塊點(diǎn)擊屏幕開(kāi)始游戲游戲開(kāi)始時(shí),小球向上方運(yùn)行小球與磚塊撞擊可以撞碎磚塊并反彈小球與屏幕頂部、右側(cè)、左側(cè)碰撞會(huì)反彈小球與擋板碰撞會(huì)反彈左右移動(dòng)手指可以挪動(dòng)擋板小球從屏幕下方掉出游戲結(jié)束撞碎所有磚塊游戲勝利!開(kāi)發(fā)步驟新建項(xiàng)目搭建界面獲取界面對(duì)象并監(jiān)聽(tīng)屏幕事件代碼實(shí)現(xiàn)點(diǎn)擊屏幕讓小球動(dòng)起來(lái)屏幕碰撞檢測(cè)擋板碰撞檢測(cè)磚塊碰撞檢測(cè)拖動(dòng)擋板改變小球方向勝負(fù)判斷及重置游戲新建項(xiàng)目1——選擇項(xiàng)目模板新建項(xiàng)目2——設(shè)置項(xiàng)目屬性新建項(xiàng)目3——保存項(xiàng)目新建項(xiàng)目——運(yùn)行新建項(xiàng)目——設(shè)置設(shè)備方向并隱藏狀態(tài)欄新建項(xiàng)目——再次運(yùn)行下一步搭建游戲界面搭建游戲界面——MainStoryboard搭建游戲界面——MainStoryboard簡(jiǎn)介搭建游戲界面——隱藏狀態(tài)欄搭建游戲界面——準(zhǔn)備素材搭建游戲界面——導(dǎo)入素材搭建游戲界面——添加第一個(gè)紅色磚塊搭建游戲界面——復(fù)制五個(gè)紅色磚塊搭建游戲界面——同時(shí)復(fù)制5個(gè)并統(tǒng)一修改為黃色搭建游戲界面——完成所有磚塊搭建游戲界面——添加小球和擋板并設(shè)置背景搭建游戲界面——運(yùn)行看看效果下一步讓小球動(dòng)起來(lái)的準(zhǔn)備工作讓小球動(dòng)起來(lái)——增加點(diǎn)擊手勢(shì)打開(kāi)助理編輯器——建立界面與源代碼之間的連接建立小球的IBOutlet——讓代碼可以操縱界面元素建立手勢(shì)的IBAction——特定事件發(fā)生時(shí)執(zhí)行代碼編寫tapScreen方法,確認(rèn)點(diǎn)擊事件是否執(zhí)行#pragmamark-Actions//點(diǎn)擊屏幕,開(kāi)始游戲-(IBAction)tapScreen:(id)sender{

NSLog(@"點(diǎn)擊屏幕了");}準(zhǔn)備工作——運(yùn)行看看效果下一步讓小球動(dòng)起來(lái)提問(wèn):如何讓小球動(dòng)起來(lái)?游戲啟動(dòng)流程圖需要游戲是否開(kāi)始小球初始位置游戲時(shí)鐘小球的速度位移=時(shí)間*速度游戲是否開(kāi)始的處理既然游戲開(kāi)始是由點(diǎn)擊屏幕觸發(fā)的,那么游戲啟動(dòng)之后,禁用屏幕點(diǎn)擊,即可解決重復(fù)啟動(dòng)游戲在.h中增加如下IBAction連線//點(diǎn)擊手勢(shì)@property(strong,nonatomic)IBOutlet

UITapGestureRecognizer*tapGesture;要使用游戲時(shí)鐘需要添加QuartzCore框架QuartzCore框架添加完成編碼1——成員變量定義#import"ViewController.h"http://引入QuartzCore框架,以定義游戲時(shí)鐘#import<QuartzCore/QuartzCore.h>@interface

ViewController(){//游戲時(shí)鐘

CADisplayLink*_gameTimer;

//小球初始中心點(diǎn)位置

CGPoint_originBallCenter;

//小球速度

CGPoint_ballVelocity;}@end編碼2——成員變量初始化-(void)viewDidLoad{[super

viewDidLoad];_originBallCenter=_ballImageView.center;}編碼3——點(diǎn)擊屏幕,開(kāi)始游戲//點(diǎn)擊屏幕,開(kāi)始游戲-(IBAction)tapScreen:(id)sender{

//賦予小球初始位置,Y方向是向下增加的,小球要向上運(yùn)動(dòng)

_ballVelocity=CGPointMake(0.0,-5.0);

//定義游戲時(shí)鐘

_gameTimer=[CADisplayLink

displayLinkWithTarget:self

selector:@selector(step:)];

//將游戲時(shí)鐘添加到主運(yùn)行循環(huán)[_gameTimer

addToRunLoop:[NSRunLoop

mainRunLoop]forMode:NSDefaultRunLoopMode];

//標(biāo)記游戲開(kāi)始[_tapGesture

setEnabled:NO];}iOS的坐標(biāo)系坐標(biāo)原點(diǎn)(0,0)X

320Y

480編碼4——游戲時(shí)鐘處理方法//游戲時(shí)鐘處理方法-(void)step:(CADisplayLink*)sender{

//更新小球位置[_ballImageView

setCenter:CGPointMake(_ballImageView.center.x+_ballVelocity.x,

_ballImageView.center.y+_ballVelocity.y)];}讓小球動(dòng)起來(lái)——運(yùn)行看看效果下一步碰撞檢測(cè)問(wèn)題:小球飛出屏幕了!需要檢測(cè)的碰撞小球與屏幕的碰撞小球與磚塊的碰撞小球與擋板的碰撞小球與屏幕的碰撞實(shí)現(xiàn)1——屏幕頂部#pragmamark-碰撞檢測(cè)-(void)intersectWithScreen{

//與屏幕頂部碰撞

if(CGRectGetMinY(_ballImageView.frame)<=0){

_ballVelocity.y=ABS(_ballVelocity.y);}}#pragmamark-游戲時(shí)鐘處理方法//游戲時(shí)鐘處理方法-(void)step:(CADisplayLink*)sender{

//屏幕碰撞檢測(cè)[self

intersectWithScreen];

//更新小球位置[_ballImageView

setCenter:CGPointMake(_ballImageView.center.x+_ballVelocity.x,

_ballImageView.center.y+_ballVelocity.y)];}下一步其他對(duì)象碰撞檢測(cè)屏幕頂部碰撞檢測(cè)——運(yùn)行看看效果小球與其他對(duì)象碰撞準(zhǔn)備——建立磚塊IBOutlets小球與其他對(duì)象碰撞準(zhǔn)備——建立磚塊IBOutlets建立完IBOutlet連線的完整.h文件#import<UIKit/UIKit.h>@interfaceViewController:UIViewController//磚塊圖像視圖數(shù)組@property(strong,nonatomic)IBOutletCollection(UIImageView)NSArray*blockImageViews;//小球圖像視圖@property(weak,nonatomic)IBOutlet

UIImageView*ballImageView;//擋板圖像視圖@property(weak,nonatomic)IBOutlet

UIImageView*paddleImageView;//點(diǎn)擊手勢(shì)@property(strong,nonatomic)IBOutlet

UITapGestureRecognizer*tapGesture;//點(diǎn)擊屏幕,開(kāi)始游戲-(IBAction)tapScreen:(id)sender;@end小球與磚塊的碰撞實(shí)現(xiàn)1——碰撞后翻轉(zhuǎn)y方向速度//小球與磚塊的碰撞檢測(cè)-(void)intersectWithBlocks{

for(UIImageView*blockin

_blockImageViews){

//如果小球與磚塊相交

if(CGRectIntersectsRect(block.frame,_ballImageView.frame)){

//翻轉(zhuǎn)小球Y方向的速度

_ballVelocity.y*=-1;

break;}}}小球與磚塊的碰撞實(shí)現(xiàn)2——碰撞后隱藏//小球與磚塊的碰撞檢測(cè)-(void)intersectWithBlocks{

for(UIImageView*blockin

_blockImageViews){

//如果小球與磚塊相交

if(CGRectIntersectsRect(block.frame,_ballImageView.frame)&&![blockisHidden]){

//翻轉(zhuǎn)小球Y方向的速度

_ballVelocity.y*=-1;

//如果發(fā)生碰撞,隱藏磚塊

[blocksetHidden:YES];

break;}}}小球與擋板的碰撞實(shí)現(xiàn)//小球與擋板的碰撞實(shí)現(xiàn)-(void)intersectWithPaddle{

//與擋板的碰撞檢測(cè)

if(CGRectIntersectsRect(_paddleImageView.frame,_ballImageView.frame)){

_ballVelocity.y=-ABS(_ballVelocity.y);}}下一步拖動(dòng)擋板改變小球方向碰撞檢測(cè)——運(yùn)行看看效果拖動(dòng)擋板——增加拖動(dòng)手勢(shì)建立完IBAction連線的完整.h文件#import<UIKit/UIKit.h>@interfaceViewController:UIViewController//磚塊圖像視圖數(shù)組@property(strong,nonatomic)IBOutletCollection(UIImageView)NSArray*blockImageViews;//小球圖像視圖@property(weak,nonatomic)IBOutlet

UIImageView*ballImageView;//擋板圖像視圖@property(weak,nonatomic)IBOutlet

UIImageView*paddleImageView;//點(diǎn)擊手勢(shì)@property(strong,nonatomic)IBOutlet

UITapGestureRecognizer*tapGesture;//點(diǎn)擊屏幕,開(kāi)始游戲-(IBAction)tapScreen:(id)sender;//拖動(dòng)擋板-(IBAction)dragPaddle:(UIPanGestureRecognizer*)sender;@end拖動(dòng)擋板代碼實(shí)現(xiàn)//拖動(dòng)擋板-(IBAction)dragPaddle:(UIPanGestureRecognizer*)sender{

//如果是手指移動(dòng)

if(UIGestureRecognizerStateChanged==sender.state){

//獲取手指位置

CGPointlocation=[senderlocationInView:self.view];

//設(shè)置擋板位置[_paddleImageView

setCenter:CGPointMake(location.x,_paddleImageView.center.y)];}}屏幕碰撞檢測(cè)方法擴(kuò)展,增加底部掉出判斷//小球與屏幕的碰撞檢測(cè)-(void)intersectWithScreen{

//與屏幕頂部碰撞

if(CGRectGetMinY(_ballImageView.frame)<=0){

_ballVelocity.y=ABS(_ballVelocity.y);}

//從屏幕底部掉出

if(CGRectGetMinY(_ballImageView.frame)>self.view.frame.size.height){

NSLog(@"你輸了!%@",NSStringFromCGSize(self.view.frame.size));[_gameTimer

invalidate];

//TODO:恢復(fù)游戲狀態(tài)

}}修改小球的水平速度1——修改擋板拖動(dòng)方法增加成員變量記錄擋板水平移動(dòng)速度CGFloat_paddleVelocityX;拖動(dòng)擋板方法//拖動(dòng)擋板-(IBAction)dragPaddle:(UIPanGestureRecognizer*)sender{

//如果是手指移動(dòng)

if(UIGestureRecognizerStateChanged==sender.state){

//省略部分代碼……

NSLog(@"%f",[sendervelocityInView:self.view].x);

//記錄擋板水平移動(dòng)速度

_paddleVelocityX=[sendervelocityInView:self.view].x;

}else

if(UIGestureRecognizerStateEnded==sender.state){

//復(fù)位擋板水平移動(dòng)速度

_paddleVelocityX=0;}}修改小球的水平速度2——擋板碰撞時(shí)修改小球速度//小球與擋板的碰撞檢測(cè)-(void)intersectWithPaddle{

//與擋板的碰撞檢測(cè)

if(CGRectIntersectsRect(_paddleImageView.frame,_ballImageView.frame)){

_ballVelocity.y=-ABS(_ballVelocity.y);

//在此僅對(duì)水平速度做了簡(jiǎn)單的修正

_ballVelocity.x+=_paddleVelocityX/120.0;}}修改小球的水平速度3——屏幕碰撞檢測(cè)完善//與屏幕左側(cè)碰撞if(CGRectGetMinX(_ballImageView.frame)<=0){

_ballVelocity.x=ABS(_ballVelocity.x);}//與屏幕右側(cè)碰撞檢測(cè)if(CGRectGetMaxX(_ballImageView.frame)>self.view.bounds.size.width){

_ballVelocity.x=-ABS(_ballVelocity.x);}游戲難度有點(diǎn)高!解決辦法:加寬擋板拖動(dòng)擋板——運(yùn)行看看效果加寬擋板加寬擋板——運(yùn)行看看效果果然簡(jiǎn)單多了!下一步:勝負(fù)判斷及重置游戲游戲結(jié)束后需要做的事情提示用戶游戲勝負(fù)恢復(fù)UI狀態(tài)消息標(biāo)簽小球擋板磚塊記錄小球和擋板的初始中心點(diǎn)位置-(void)viewDidLoad{[super

viewDidLoad];

//小球初始中心點(diǎn)位置

_originBallCenter=_ballImageView.center;

//擋板初始中心點(diǎn)位置

_originPaddleCenter=_paddleImageView.center;}點(diǎn)擊開(kāi)始游戲時(shí),設(shè)置UI狀態(tài)//點(diǎn)擊屏幕,開(kāi)始游戲-(IBAction)tapScreen:(id)sender{

//消息標(biāo)簽[_messageLabel

setHidden:YES];

//小球[_ballImageView

setCenter:_originBallCenter];

//擋板[_paddleImageView

setCenter:_originPaddleCenter];

//磚塊

for(UIImageView*blockin

_blockImageV

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論