2

我一直在网上(主要是这个网站)搜索这个问题的答案。我发现了一些相关的问题,所有这些问题都对我不起作用或没有自己回答。我正在编写一个简单的乒乓球程序,现在我有一个带有按钮的主加载屏幕,可以将您带到游戏屏幕。游戏屏幕上有一个按钮,用于使用 NSTimer 启动球移动。

游戏计算机VSPlayer.h

#import <UIKit/UIKit.h>


int x;
int y;

@interface GameComputerVSPlayer : UIViewController {

IBOutlet UIImageView *backcolor;
IBOutlet UIImageView *ball;
IBOutlet UIImageView *computerPaddleVert;
IBOutlet UIImageView *computerPaddle;
IBOutlet UIImageView *playerPaddleVert;
IBOutlet UIImageView *playerPaddle;
IBOutlet UIImageView *cornerTL;
IBOutlet UIImageView *cornerTR;
IBOutlet UIImageView *cornerBL;
IBOutlet UIImageView *cornerBR;

IBOutlet UIButton *startButton;


NSTimer *timer;


}

@property (nonatomic, retain) UIImageView *ball;
@property (nonatomic, retain) UIImageView *computerPaddleVert;
@property (nonatomic, retain) UIImageView *computerPaddle;
@property (nonatomic, retain) UIImageView *playerPaddleVert;
@property (nonatomic, retain) UIImageView *playerPaddle;


-(IBAction)nextPoint:(id)sender;
-(void)ballMovement;



@end

游戏计算机VSPlayer.m

#import "GameComputerVSPlayer.h"
#import "ViewController.h"

@interface GameComputerVSPlayer ()

@end    

@implementation GameComputerVSPlayer

@synthesize ball, playerPaddleVert, playerPaddle, computerPaddleVert, computerPaddle;


-(void)ballMovement {
ball.center = CGPointMake(ball.center.x + x, ball.center.y + y);



}

-(IBAction)nextPoint:(id)sender{
timer = [NSTimer scheduledTimerWithTimeInterval:0.01   target:self 
selector:@selector(ballMovement)  userInfo:nil repeats:YES]; 

x = arc4random()%9;
x = x - 5;

y = arc4random()%9;
y = y - 5;

if (y==0) {
    y = 1;
}


if (x==0) {
    x = 1;
} 
}





- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

我也尝试过使用 NSZombie,但这并没有向我展示任何东西。提前感谢您的工作!

编辑:我对标题和问题不是很清楚,对此感到抱歉。这是我遗漏的另一条信息:

最初我收到 EXC_BAD_ACCESS code=1 错误,然后我启用了 NSZombie,它变成了 EXC_BREAKPOINT。

我摆弄了有关按钮的代码,这导致没有解决方案。我使用 IB 断开按钮(接收操作)并运行它。我能够去查看按钮,但无法单击它(这并不奇怪)。

这也是我的第一个不涉及任何教程的构建,如果我让这个变得困难,那么抱歉!

不确定这些额外信息是否有帮助..但再次感谢大家^.^

编辑:编辑:我确实启用了 ARC,这是迄今为止我与遵循教程时所做的唯一区别(https://www.youtube.com/watch?v=RFB3QhfOwD4)。在此之前,我确实尝试过不启用 ARC,但在更改视图时遇到了类似的错误。所以我将尝试打开教程项目并从中获取代码并将其移动到一个新项目中,然后进行调整。我会让大家知道它是如何工作的。

4

2 回答 2

0

我不确定这是否是您的问题,但此方法是 IBAction 并且可能连接到按钮。每次触摸它都会初始化一个新的 NSTimer。将 NSTimer 保持在一个强属性中,并且仅在它不为零时才创建一个:

if (!self.timer) {
   self.timer = [NSTimer scheduledTimerWithTimeInterval:0.01 
   target:self 
   selector:@selector(ballMovement)
   userInfo:nil
   repeats:YES]; 
}
于 2013-09-18T21:47:34.493 回答
0

我认为

-(void)ballMovement: (NSTimer*) timer {
    ball.center = CGPointMake(ball.center.x + x, ball.center.y + y);
}

timer = [NSTimer scheduledTimerWithTimeInterval:0.01   target:self 
selector:@selector(ballMovement:)  userInfo:nil repeats:YES];

注意:之后ballMovement:

会帮助你。

于 2013-09-18T18:29:51.267 回答