gpt4 book ai didi

iphone - 如何在 Objective-C 或 cocos2d 中实现 powerUps 和其他游戏改变对象

转载 作者:行者123 更新时间:2023-12-03 21:20:50 27 4
gpt4 key购买 nike

好的,所以我有这些能力,我想减慢/加快游戏中其他对象的移动几秒钟。

我有一个对象数组,其中有一个名为spawnInterval的变量,随着游戏的进行,它会变得越来越快,使得游戏在几分钟后变得更加困难。

但我无法真正掌握如何制作它,以便游戏中的角色会对不同的对象做出不同的 react ,就像当 fastPowerUp 被角色 Sprite 击中时,生成间隔不会改变。

反之亦然,使用slowPowerUp。

我目前拥有的代码是在更新方法中调用的移动序列方法中的代码:

-

(void) updateObstacles:(ccTime)delta{

for (int i = 0; i < 20; i++) {
//int randomizer = CCRANDOM_0_1() * [obstacles count];
//NSLog(@"randomizer: %i",randomizer);
CCSprite* randomObject = [obstacles randomObject];
currentObject = [obstacles indexOfObject:randomObject];

if ([randomObject numberOfRunningActions] == 0) {
[self runObstacleMoveSequence:randomObject withTimer:delta];

break;
}
}
}

-(void) runObstacleMoveSequence:(CCSprite *)object withTimer:(ccTime)delta{
static int time;
//Slowly increase object speed
numObstaclesMoved++;
if (!slowPowerUp && !fastPowerUp) {
time += delta;
if (numObstaclesMoved % 17 == 0 && obstacleMoveDuration > 2.0f) {
obstacleMoveDuration -= 0.2f;
if (spawnInterval > 0.1f) {
[self unschedule:@selector(updateObstacles:)];
[self schedule:@selector(updateObstacles:) interval:spawnInterval];
spawnInterval-=0.1f;
NSLog(@"interval: %f",spawnInterval);
}
}
}else if (slowPowerUp && !fastPowerUp) {
if (numObstaclesMoved % 17 == 0 && obstacleMoveDuration > 2.0f) {
obstacleMoveDuration += 3.0f;
if (spawnInterval > 0.1f) {
[self unschedule:@selector(updateObstacles:)];
[self schedule:@selector(updateObstacles:) interval:spawnInterval];
spawnInterval-=0.1f;
NSLog(@"interval: %f",spawnInterval);
if (time >= (delta + 3)) {
slowPowerUp = NO;
obstacleMoveDuration -= 3.0f;
}

}
}
}else if (!slowPowerUp && fastPowerUp) {
if (numObstaclesMoved % 17 == 0 && obstacleMoveDuration > 2.0f) {
obstacleMoveDuration -= 3.0f;
if (spawnInterval > 0.1f) {
[self unschedule:@selector(updateObstacles:)];
[self schedule:@selector(updateObstacles:) interval:spawnInterval];
spawnInterval-=0.1f;
NSLog(@"interval: %f",spawnInterval);
if (time >= (delta + 3)) {
fastPowerUp = NO;
obstacleMoveDuration += 3.0f;
}
}
}
}
CGSize screenSize = [[CCDirector sharedDirector]winSize];
CGPoint aboveScreenPosition = CGPointMake(object.position.x, screenSize.height - object.position.y);

int rotations = (CCRANDOM_0_1()*3) * 360;
float duration = (CCRANDOM_0_1()*5.0f) + 8.0f;
CCMoveTo* move = [CCMoveTo actionWithDuration:obstacleMoveDuration position:aboveScreenPosition];
CCRotateTo* rotate = [CCRotateBy actionWithDuration:duration angle:rotations];
CCSpawn* moveRotate = [CCSpawn actions: move, rotate, nil];
CCCallFuncN* call = [CCCallFuncN actionWithTarget:self selector:@selector(objectAboveScreen:)];
CCSequence* sequence = [CCSequence actions:moveRotate, call, nil];
[object runAction:sequence];
if (time >= (delta + 3)) {
fastPowerUp = NO;
}

}


-(void) objectAboveScreen:(id) sender{
//make sure sender is actually of the right class
NSAssert([sender isKindOfClass:[CCSprite class]], @"sender is not a CCSprite!");
CCSprite* obstacle = (CCSprite*)sender;

//move the back to the bottom of the screen
CGPoint pos = obstacle.position;
CGSize screenSize = [[CCDirector sharedDirector]winSize];
pos.y = (-screenSize.height - [obstacle texture].contentSize.height);
pos.x = CCRANDOM_0_1() * screenSize.width;
obstacle.position = pos;
}

我真的不知道接下来该去哪里...我应该将 powerUps 设置为不同的类别吗?如果是这样,我将如何实现这样的事情?我真的很讨厌试图要求别人解决我的问题,但我真的无法绞尽脑汁解决这个问题,而且我很新......如果向我解释,那么我知道我将能够实现在我自己的 future 游戏中......

提前致谢,如果需要更多信息,请告诉我...

最佳答案

我会做类似的事情

在.h文件中

float speedModifier;
-(void)resetPowerUp;

在.m

-(void)resetPowerUp
{
speedModifier = 1;
}

无论您在何处初始化关卡

[self resetPowerUp];

与加电发生碰撞时:

speedModifier = 2;
[self performSelector:@selector(resetPowerUp) withObject:nil afterDelay:5];

然后无论你移动到什么地方,无论它的速度应该受到加电模式的影响,将动画的速度(或除以它到达目的地所需的持续时间)乘以速度修改

希望有帮助

关于iphone - 如何在 Objective-C 或 cocos2d 中实现 powerUps 和其他游戏改变对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5007432/

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