Ios 为对象创建边界
我对objective-c和iOS在Xcode中的编程相当陌生,在制作我的第一个应用程序时,我遇到了在屏幕边缘制造障碍物的问题,而物体无法通过。我尝试在边界处放置对象并使用CGRectIntersectsRect,但边界与主对象之间的碰撞未注册。有人知道我会怎么做吗 这是我用于对象移动的代码:Ios 为对象创建边界,ios,objective-c,Ios,Objective C,我对objective-c和iOS在Xcode中的编程相当陌生,在制作我的第一个应用程序时,我遇到了在屏幕边缘制造障碍物的问题,而物体无法通过。我尝试在边界处放置对象并使用CGRectIntersectsRect,但边界与主对象之间的碰撞未注册。有人知道我会怎么做吗 这是我用于对象移动的代码: const float rate= 0.025; NSTimer *goLeft; NSTimer *goRight; - (IBAction)right { goRight=[NSTimer
const float rate= 0.025;
NSTimer *goLeft;
NSTimer *goRight;
- (IBAction)right {
goRight=[NSTimer scheduledTimerWithTimeInterval:rate
target:self
selector:@selector(goRight)
userInfo:nil
repeats:YES];
if (goRight == nil){
goRight=[NSTimer scheduledTimerWithTimeInterval:rate target:self selector:@selector(goRight) userInfo:nil repeats:YES];
}
}
- (IBAction)left{
goLeft=[NSTimer scheduledTimerWithTimeInterval:rate
target:self
selector:@selector(goLeft)
userInfo:nil
repeats:YES];
if (goLeft == nil){
goLeft=[NSTimer scheduledTimerWithTimeInterval:rate target:self selector:@selector(goLeft) userInfo:nil repeats:YES];
}
}
-(IBAction)stopLeft{
[goLeft invalidate];
goLeft=nil;
}
-(IBAction)stopRight{
[goRight invalidate];
goRight=nil;
}
-(void)goLeft{
_userToken.center =CGPointMake(_userToken.center.x -20, _userToken.center.y);
}
-(void)goRight{
_userToken.center =CGPointMake(_userToken.center.x +20, _userToken.center.y);
}
以及用于与左边框处的对象发生碰撞(userToken和friendly都是UIImageView)。但是,当它们发生冲突时,不会执行NSLog
-(void)checkForCollision{
if (CGRectIntersectsRect(_userToken.frame, _friendly.frame)){
NSLog(@"Left Intersect");
}
}
测试时,您不会说将
\u userToken.frame
和\u-friendly.frame
设置为什么-最好在测试时记录它们,以便手动验证
如果有效屏幕区域为rect,另一种方法是检查令牌和有效区域的交点,并验证其是否等于令牌帧:
if (CGRectEqualToRect(CGRectIntersection(_userToken.frame, validFrame), _userToken.frame)) { ...
当通过任何方法检查帧是否位于同一坐标空间(视图是否具有相同的superview,或者是否将其转换为相同的公共superview)时,这一点非常重要。同样,日志记录将帮助您验证这一点
旁白:
如果计时器刚刚失败,尝试重新创建它不太可能有帮助。在创建新计时器之前,您应该检查现有计时器并使其失效(否则,您可能会导致多个计时器运行,并且无法停止它们)。提供有关对象是什么以及它们如何移动的更多上下文。显示您迄今为止尝试过的代码。添加到问题中的代码冲突部分工作得很好,但是我如何阻止多个计时器运行?您只能停止您有引用的计时器,因此如果您失去该引用,则无法停止它。