2013-08-04 56 views
0

我是iphone編程新手。我有兩個有碰撞的uiimageviews。但是,它們內部的圖像不是正方形,所以如果碰到一個角落,它會檢測到兩個圖像之間不存在的碰撞。這是因爲UIImageView是矩形。因爲我找不到一個方法,如果它碰到一個角落,就不會檢測到碰撞(這個建議,如果存在的話,會很好),我相信我應該做兩個精靈而不是uiimageviews。我沒有可可2sd。我只有xcode 3.1。我該如何聲明一個簡單的精靈並檢查它們之間的碰撞檢測器?iphone-How to make a simple sprite?

+0

你爲什麼使用Xcode 3.1? – msgambel

回答

0

使用CoreGraphics時,非透明像素上的碰撞效率很低。

你最好投資學習cocos2d和box 2d。

您可以使用工具創建的sprite周圍創建的beizer路徑。 physics editor

然後將它們存儲在一個形狀文件中,該文件保存精靈的形狀。然後將它們連接到cocos2d中的精靈,並在背景中的形狀上完成碰撞。您可以打開調試模式以查看屏幕上的形狀。

這可以通過將位掩碼分配給形狀來進行到下一級,並且這些開/關開關允許例如選擇某些精靈與其他人碰撞時會發生什麼(可能爲不同的形狀碰撞對觸發不同的動畫和聲音效果)。有一件事是不可能的,那就是嘗試使用具有最少量頂點的beizer路徑來封閉你的精靈形狀,因爲在運行時需要的檢查越多,並且幀速率可能會下降。

總之,不是不適合檢查非透明部件上的碰撞,即使在cocos2d中也需要檢查每個像素。

0

使用這種方法

//對於img_view1矩形 //參數是x,y,寬度,高度

CGRect image_rect1 = CGRectMake(img_view1.position.x,img_view1.position.y,100,100); 

//For img_view2 rect 
//parameters are x,y,width,height 

CGRect image_rect2 = CGRectMake(img_view2.position.x,img_view2.position.y,100,100) 

Collision detection: 

    if(CGRectIntersectsRect(image_rect1, image_rect2)) 
    { 
     NSLog(@"Collision Example"); 
    } 

但是如果你不想使用的CGRect的意見,你可以簡單地使用它們各自的框架屬性。

-(BOOL)viewsDoCollide:(UIView *)view1 :(UIView *)view2{ 
    if(CGRectIntersectsRect(view1.frame, view2.frame)) 
    { 
     return YES; 
    } 
    return NO; 
} 

,但如果你使用cocoa2d

+0

但是,關於頂級示例,如果它碰到方形圖像視圖的角落,是不是還會發生碰撞? – user2607954

0

請試試這個代碼

#define imageWidth 40 
#define imageHeight 60 

UIImage *image1 = [UIImage imageNamed:@"firstimage.png"]; 
UIImage *image2 = [UIImage imageNamed: @"secondimage.png"]; 

CGSize itemSize = CGSizeMake(imageWidth, imageHeight); 

UIGraphicsBeginImageContext(itemSize); 

CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width, itemSize.height); 
[image1 drawInRect:imageRect]; 
[image2 drawInRect:imageRect]; 

UIImage *overlappedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

的UIImage的overlappedImage是包含初始者的新形象將是巨大的,重疊。說實話,我不知道這是否是達到這個結果的最好方法,但我知道它確實有效。