2013-08-04 3 views
0

나는 아이폰 프로그래밍을 처음 사용합니다. 충돌이있는 두 개의 uiimageview가 있습니다. 그러나 내부의 이미지는 정사각형이 아니므로 구석을 치면 두 이미지 사이에 존재하지 않는 충돌을 감지합니다. 이것은 UIImageViews가 사각형이기 때문입니다. 모서리를 치면 충돌을 감지 할 수있는 방법을 찾지 못했기 때문에 (존재한다면 좋을 것입니다.), 나는 uiimageview 대신 두 개의 스프라이트를 만들어야한다고 생각합니다. 나는 코코아 2sd가 없다. xcode 3.1이 있습니다. 어떻게 간단한 스프라이트를 선언하고 그들 사이의 충돌 감지기를 확인합니까?아이폰 - 간단한 스프라이트 만드는 법?

+0

왜 Xcode 3.1을 사용하고 있습니까? – msgambel

답변

0

투명하지 않은 픽셀의 충돌은 CoreGraphics를 사용하면 비효율적입니다.

cocos2d 및 상자 2d 학습에 투자하는 것이 좋습니다.

예를 들어 도구를 사용하여 스프라이트 주변에 작성하는 비이저 경로를 사용합니다. physics editor

다음은 스프라이트의 모양을 유지하는 모양 파일에 저장됩니다. 그런 다음 cocos2d의 스프라이트에 연결되고 충돌이 배경에있는 모양에 대해 수행됩니다. 디버그 모드를 켜면 화면의 모양을 볼 수 있습니다.

이것은 비트 마스크를 형상에 할당함으로써 다음 단계로 나아갈 수 있으며, 이러한 온/오프 스위치는 예를 들어. 특정 스프라이트가 다른 스프라이트와 충돌 할 때 발생하는 것을 선택합니다 (다른 모양 충돌 쌍에 대해 다른 애니메이션 및 사운드 효과를 트리거 할 수 있음). 한 가지 중요한 점은 런타임 중에 더 많은 검사가 필요하고 프레임 속도가 떨어질수록 더 적은 양의 정점을 갖는 Beizer 경로로 스프라이트 모양을 잘라내고 시도하는 것이 중요하다는 것입니다.

즉, 각 픽셀을 검사해야하므로 cocos2d에서도 비 투명 부분의 충돌을 검사하는 것은 적합하지 않습니다.

0

이 방법을 사용

// img_view1의 RECT를 들어 // 매개 변수입니다 x, y, 폭, 높이 당신의 의견에 대한 CGRect를 사용하려는 해달라고하지만

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"); 
    } 

간단히 할 수있는 각각의 프레임 속성을 사용하십시오.

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

하지만

+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 초기 것들을 포함 된 새 이미지를 시도하십시오 cocoa2d 사용하는 경우는 좋은 것, 중복. 솔직히이 결과를 얻는 가장 좋은 방법인지는 모르지만 분명히 효과가 있다는 것을 알고 있습니다.

관련 문제