此代码用于测试我的碰撞,但它仅适用于每个UIImageView的两侧。为什么它不适用于三方?它永远不会在UIImageView的顶部和底部或左右工作。它只能在顶部和左侧或顶部和右侧或底部和右侧或底部和左侧工作。这是为什么?我如何让它至少在三个方面起作用?
int moveX;
int moveY;
viewController.h{
IBOutlet UIImageView *circle;
NSTimer *time;
IBOutlet UIImageView *platform;
}
-(IBAction)StartGame:(id)sender;
-(void)moveCircle;
-(void)bounce;
@end
viewcontroller.m
-(IBAction)StartGame:(id)sender{
start.hidden=YES;
time=[NSTimer scheduledTimerWithTimeInterval:0.02 target:self selector:@selector(moveCircle) userInfo:nil repeats:YES];
circleX=arc4random()%11;
circleX=circleX-5;
circleY=arc4random()%11;
circleY=circleY-5;
circleX=arc4random()%11;
circleX=circleX+5;
circleY=arc4random()%11;;
circleY=circleY+5;
if (circleX==0) {
circleX=1;
}
if (circleY==0) {
circleY=1;
}
-(void)moveCircle{
circle.center=CGPointMake(circle.center.x -circleX, circle.center.y -circleY);
if (circle.center.x <30) {
circleX=0-circleX;
}
if (circle.center.x >320) {
circleX=0-circleX;
}
if (circle.center.y <28 ) {
circleY=0-circleY;
}
if (circle.center.y >568) {
circleY=0-circleY;
}
[self bounce];
}
-(void)bounce{
if (CGRectIntersectsRect(circle.frame, platform.frame)) {
circleY=arc4random()%5;
circleY=0+circleY;
circleX=arc4random()%5;
circleX=0+circleX;
circleY=arc4random()%5;
circleY=0-circleY;
circleX=arc4random()%5;
circleX=0-circleX;
}
}
答案 0 :(得分:0)
我在你的问题中看不出任何意义,但让我们看看你的代码:
假设你从StartGame
开始,希望只发生一次:
circleX
和circleY
设置为-5到5之间的某个随机位置circleX
和circleY
设置为5到15之间的某个随机位置(再次?!)circleX
和circleY
是否为0并将其设置为1(由于之前的陈述,这种情况极不可能发生)然后移动圈子:
circleX
和circleY
值添加到圆心,然后我假设这两个值实际上是速度。 (到目前为止一直很好)bounce
反弹方法:
circle
和platform
帧是否相交。 (哦,我猜)circleX
,将circleY
设置为0到4 circleX
和circleY
从0到-4(再次?!)所以我可以从这段代码中假设你在视图控制器上有2个视图,其中一个是名为platform
的静态障碍,另一个是移动circle
。根据{{1}}方法中的一些随机值并正确地从硬编码边界反弹,圆圈本身将向某个方向移动。如果StarGame
与circle
相交,则圆圈会将速度更改为X和Y中从-4到0的某些随机负值。
那么究竟是什么问题呢? platform
的反弹将使platform
移动到屏幕的左上角,无论circle
从circle
点击platform
。也许您需要在if
方法中使用bounce
个语句来为新速度找到正确的值,具体取决于platform
来自哪一侧。