我正在做一个应用,用户可以点击地图,听取不同的声音,具体取决于点击的位置。我有一个多边形的点,它的工作完美。我已经创建了音频播放列表系统,它也可以对音频文件进行排队并按顺序播放它们。这也有效。但是,我正在尝试实现一种方法,该方法检查先前是否已单击他刚刚单击的区域/多边形,以便不能一次又一次地播放相同的声音。我有一个PlaceInMap类,它保存一个区域的多边形,并且如果点击的点位于多边形等等,则进行必要的检查......
目前,我已经有两个存储在NSMutableArray中的PlaceInMap类实例,每当发生一次点击时,我遍历该数组并调用每个实例- (BOOL)checkCollisionWithLat:(NSString *)lat andLon:(NSString *)lon
方法。该方法返回YES或NO,具体取决于单击是否在多边形内。这很好(我在标签上输出结果)。这是方法:
- (BOOL)checkCollisionWithLat:(NSString *)lat andLon:(NSString *)lon {
if ( [self isLocationInsideX:lat andY:lon] ) {
if ( currentlyHere == 0) {
[[appDelegate audioPlayer] addToQueue:audioFileName];
[[appDelegate audioPlayer] iterateQueue];
}
currentlyHere = 1;
return YES;
}
else {
currentlyHere = 0;
return NO;
}
}
由于某种原因,currentlyHere
的检查似乎不起作用,除了该类的第一个实例...部分。
这是发生的事情: 我在无限循环1获得我的初始位置。这是在实例1中,声音播放。然后我点击实例2上的多边形,它的声音播放。现在我再次点击实例一个多边形,当我再次点击声音不播放的实例二进制多边形时,它的声音播放。但每次之后,当我点击实例的一个多边形时,声音会按照它应该播放...
现在当我删除if ( currentlyHere == 0 )
声音播放正确时...
目前这里是NSInteger,但我已经尝试过使用int和BOOL ......
这很奇怪......文本输出总是能正确显示我点击的多边形。
抱歉我的眼睛已经完成了错字... = P
编辑:
currentHere在类的标题中定义为实例变量。这是该类的初始化:
- (id) init {
if (self = [super init]) {
currentlyHere = 0;
[self setAppDelegate:[[UIApplication sharedApplication] delegate]];
}
return self;
}
答案 0 :(得分:1)
似乎currentlyHere
变量未正确设置为零;也许当你在外面时不会调用命中检测方法。在测试之前添加一些NSLog
语句以检查currentlyHere
的值。
- (BOOL)checkCollisionWithLat:(NSString *)lat andLon:(NSString *)lon {
NSLog("In checkCollisionWithLat (%d)", currentlyHere);
if ( [self isLocationInsideX:lat andY:lon] ) {
NSLog("Inside (%d)", currentlyHere);
if ( currentlyHere == 0) {
[[appDelegate audioPlayer] addToQueue:audioFileName];
[[appDelegate audioPlayer] iterateQueue];
}
currentlyHere = 1;
return YES;
}
else {
NSLog("Outside (%d)", currentlyHere);
currentlyHere = 0;
return NO;
}
}