gpt4 book ai didi

ios - 碰撞检测只发生在屏幕顶部

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:44:09 25 4
gpt4 key购买 nike

我打算做一个非常简单的游戏,比如一个 Sprite 从顶部掉下来,我必须用另一个 Sprite 接住它,如果我不这样做, Sprite 就会跑出屏幕并移除,那部分没问题,我还添加了碰撞检测,主要问题是这种碰撞只发生在屏幕的上侧而不是屏幕的底部,为什么会发生这种情况请帮忙,(我是新手:S),这是完整的代码

在我的.h`然后.m

{
CCSprite *right;
CCSprite *left;


NSMutableArray *_left;
}




-(void)ringcreate:(ccTime)dt
{

CGSize winsize = [[CCDirector sharedDirector] winSize];

int minX = left.contentSize.width / 2;
int maxX = winsize.width - left.contentSize.width/2;
int rangeX = maxX - minX;
int actualX = (arc4random() % rangeX) + minX;



left = [CCSprite spriteWithFile:@"2.png"];
left.position = ccp(actualX,winsize.height);
[self addChild:left];




id move3 = [CCMoveTo actionWithDuration:5 position:ccp(winsize.width/2,0)];


[left runAction:move3];

}




-(id) init
{
// always call "super" init
// Apple recommends to re-assign "self" with the "super's" return value
if( (self=[super init]) ) {

self.touchEnabled = YES;

right = [CCSprite spriteWithFile:@"1.png"];
right.position = ccp(0,0);
[self addChild:right];


[self schedule:@selector(ringcreate:) interval:2];
[self schedule:@selector(update:)];

}
return self;
}


-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch =[touches anyObject];
CGPoint location =[touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];




id move = [CCMoveTo actionWithDuration:1 position:ccp(location.x,location.y)];

[right runAction:move];



}



-(void) update:(ccTime)dt
{
if (CGRectIntersectsRect(right.boundingBox, left.boundingBox)) {

CCLOG(@"collison hoyse");



id move1 = [CCScaleTo actionWithDuration:0.4 scale:0.3];
left.visible = NO;
[left runAction:move1];



}
}

最佳答案

我解决了这个问题,我只需要添加数组并用那个方法更新它们,

-(void) update:(ccTime)dt
{
NSMutableArray *crabToUpdate = [[NSMutableArray alloc] init];
for (CCSprite *crab in crabarray) {

NSMutableArray *ring_to_delete = [[NSMutableArray alloc] init];
for (ring1 in ringarray) {

if (CGRectIntersectsRect(crab.boundingBox, ring1.boundingBox)) {
[ring_to_delete addObject:ring1];
}
}

for (CCSprite *ring1 in ring_to_delete) {
[ringarray removeObject:ring1];
[self removeChild:ring1 cleanup:YES];
}
if (ring_to_delete.count >0) {
[crabToUpdate addObject:crab];
}

[ring_to_delete release];


}
}

关于ios - 碰撞检测只发生在屏幕顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15609689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com