2

我正在尝试一些简单的动画,并遵循了一个基本弹跳球的教程。

如何使用我自己的一组坐标而不是整个屏幕来限制球反弹的位置?我在教程中使用的代码随机选择整个屏幕的坐标,我想设置它的坐标,这样它只会在屏幕中间的一个小方块中反弹,而不是出去那些界限。

.m

 int ballx, bally;
 ///////

 ballx = arc4random() % 320;   

 bally = arc4random() % 480; 

 //////////


-(void)movetheball { 
    [UIView beginAnimations: @"MovingTheBallAround" context: nil];   

    [UIView setAnimationDelegate: self];
    [UIView setAnimationDuration: 1.0];
    [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
    myball.frame =  CGRectMake(ballx, bally,myball.frame.size.width,myball.frame.size.height);  
    [UIView commitAnimations];   

}
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(SEL)aSelector {  

    if (finished) {  

        // set new coordinate for ballx and bally  

        ballx = arc4random() % 320; 

        bally = arc4random() % 480;   



        [self movetheball];  

    }  

我看过SO,但除了以下内容外,我找不到类似的东西:

ballx.center = CGPointMake(320/2, [self randNumBetween:-50:-100]); 

我试图适应但没有取得多大成功。我没有大量的编程经验,所以我不确定我是否对那段代码有误解

4

2 回答 2

3
ballx = arc4random() % 320; 

bally = arc4random() % 480;

正如您所注意到的,这些是您设置球的新坐标的线,这两个变量只是数字。它们没有称为 的组件center,也没有称为CGPoints,因此,尽管您在建议的修改方面走在正确的轨道上,但您自己却让事情变得过于复杂。

你可能不明白的部分是%标志;这是“模数”运算符。简单来说,就是将左侧的数字限制为小于右侧的数字。

请注意320480恰好是整个屏幕的宽度和高度,并观察您正在将模运算的结果(使用该宽度和高度)分配给代表您的球位置的变量。

希望这已经足够暗示了。

于 2012-07-06T19:19:42.213 回答
0

基本上,您需要修改以下部分并提出逻辑,以便为任何必要的视图窗口设置边界。

ballx = arc4random() % 320;   
bally = arc4random() % 480; 

或者您可以通过 [Self.view addsubview:constrainedView] 创建特定大小的 UIView 并将其放入您的 UIViewController 中,然后您可以在该视图中添加球。但是你将不得不再次更改 arc4random() % x; 其中 x 是 UIView 的宽度或高度。

于 2012-07-06T19:12:54.420 回答