用代码进行碰撞检测

时间:2014-03-31 20:02:11

标签: ios objective-c

我是编程新手,现在真的需要帮助。我一直在寻找过去两个月的答案。我正在使用Xcode和objective-c。我的问题是关于碰撞检测。当2个矩形使用CGRECT发生碰撞时有几千个例子,例如警报或翻转屏幕或播放声音分机,但没有任何关于做任何事情的事情哈哈!我想要的只是我的对象不通过另一个对象!这就是我想继续在屏幕上拖动它。我只是不希望这两个对象在彼此之上,看起来我是世界上唯一想要这样做的人,因为我无法找到任何东西。所以,请帮助,因为我是新的...尽可能简单,请在这里:

#import "YellowDot.h"

@interface YellowDot ()

@end

@implementation YellowDot
@synthesize Dot;
@synthesize CollisionImage;

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

{

UITouch *Drag = [ [  event allTouches ] anyObject ];
Dot.center = [ Drag locationInView: self.view ];

[self checkCollison];

}

-(void) checkCollison
{

if (CGRectIntersectsRect(Dot.frame, CollisionImage.frame))

{
AudioServicesPlaySystemSound(playSoundId);

}


}

- (void)viewDidLoad
{

NSURL *SoundURL = [ NSURL fileURLWithPath:[[NSBundle mainBundle]           pathForResource:@"beep"ofType:@"wav"]];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)SoundURL, & playSoundId);


[super viewDidLoad];
// Do any additional setup after loading the view.


}


and here is the .h file :

#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioToolbox.h>

@interface YellowDot : UIViewController

{

IBOutlet UIImageView *Dot;
IBOutlet UIImageView *CollisionImage;
SystemSoundID playSoundId;

}

@property (nonatomic, retain) UIImageView *Dot;

@property (nonatomic, retain) UIImageView *CollisionImage;


@end

那么可以进去的是什么?碰撞时它已经播放了一个声音,你可以看到,但那就是它。 Dot是我在屏幕上拖动的图像,碰撞图像是我希望Dot碰撞但停止作为墙壁的图像。希望它足够清楚(我是法国人,对于糟糕的写作感到抱歉):S谢谢你。

1 个答案:

答案 0 :(得分:1)

鉴于您已成功检测到碰撞,答案似乎是如果移动导致碰撞,则不要将对象更新到新位置。只是不要更新Dot.center。顺序是:获取移动的触摸事件,预先计算对象的位置,如果没有碰撞,移动它;如果发生碰撞,请不要更新它的位置。

请注意,OpenGL可能更适合这种类型的东西,因为你会做很多事情。