我是编程新手,现在真的需要帮助。我一直在寻找过去两个月的答案。我正在使用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谢谢你。
答案 0 :(得分:1)
鉴于您已成功检测到碰撞,答案似乎是如果移动导致碰撞,则不要将对象更新到新位置。只是不要更新Dot.center。顺序是:获取移动的触摸事件,预先计算对象的位置,如果没有碰撞,移动它;如果发生碰撞,请不要更新它的位置。
请注意,OpenGL可能更适合这种类型的东西,因为你会做很多事情。