gpt4 book ai didi

ios - Y 坐标未正确更新

转载 作者:可可西里 更新时间:2023-11-01 05:35:54 25 4
gpt4 key购买 nike

我正在尝试创建一个横向滚动条,但我无法将对象的 Y 坐标设置为随机值。

我称我的对象为平台。我希望每个平台都出现在不同的 Y 坐标处,并且相信我的方法是正确的做法。但它并不是那么好用。

所有 Y 坐标都输出相同的数字,我不完全确定为什么?我的意思是我在实例化它们时明显添加了间距。

我还注意到的一件事是,如果我不添加计时器并调用移动方法,它们就会出现在正确的位置。所以它可能在调用函数之间。

我发现的另一个问题是,当我再次调用平台时,只有一个平台遵循幻灯片功能要求它做的事情,另外两个平台遵循点,但不对任何其他内容使用react。

非常感谢任何帮助!

//
// C4WorkSpace.m
// TheGame
//
//

#import "C4Workspace.h"

@implementation C4WorkSpace {

C4Shape *player ; // player
CGPoint p, move; // CG point for moving platforms && Players
int speed; // Speed of the platforms
C4Timer *timer; // Timer
NSMutableArray *platforms; // Platform Array

}

-(void)setup {


speed = 5; // Speed Limit
p = CGPointMake(self.canvas.width, 400); // Making 2 coordinates for the platform shape to follow
move = CGPointMake(0, 0); // Making 2 coordinates for the user shape to follow
platforms = [NSMutableArray array]; // Pointer of Array for platforms

// Generating shapes

for ( int i = 0; i < 3; i++)
{
C4Shape * s = [C4Shape rect:CGRectMake(0, 400, 50, [C4Math randomInt:50])]; // Making the platform
p.x = self.canvas.width; // x - coordinate for the platforms
p.y += 100; // y - coordinate of the platforms
s.center = p; // The Center of the Circle is P
[platforms addObject:s]; // Adding platforms to the platforms array
[self.canvas addShape:platforms[i]]; // Adding an instance of it
timer = [C4Timer automaticTimerWithInterval:1.0f/30 target:self method:@"slide" repeats:YES]; // Timer to shoot it off ever frame

}


player = [C4Shape ellipse:CGRectMake(0, 0, 50, 50)]; // The shape of the player
[self.canvas addSubview:player]; // Adding an instance of the player



}

//Moving the platform

-(void) slide {

//Calling the platforms again to add movement

for (C4Shape *s in platforms){

// Adding boundries

if (p.x <= 0 ) {
p.x = self.canvas.width; // if it's smaller than the width of the cavas auto transport
p.y = [C4Math randomInt:self.canvas.height]; // choose a different y coordinate for each

}

p.x-= speed; // Adding accelaration
C4Log(@"The Y is .%2f", p.y); // Logging the problem
s.center = p; // making the shape follow the point

}
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *place = [[event allTouches] anyObject]; // Get touches
move = [place locationInView:place.view]; // Gets the location of the current mouse point
player.center = move; // folllowing the move point

[self collisionCheck]; // collision check
}


-(void) collisionCheck {
//currently empty!

}


@end

最佳答案

y 坐标正在完美更新——在单个点上,您正在检查并在滑动方法中设置所有 C4Shapes 的中心。

在设置中这工作正常,因为你在更改它之前将 C4Shape 的中心设置为 p,但是当你转到 slide 方法中的 For 循环时,你只是记录和更新开始的那个点在最后一个地方,您在设置中更新了它,假设在调用设置和幻灯片之间没有任何反应。 p 是 C4Workspace 类的一个 ivar,因此每个实例都有一个。要解决此问题,我认为您应该将幻灯片中每次出现的 p 更改为 s.center,并删除最后一行。

顺便说一句,你应该认真考虑重命名这些方法中的变量,它们很难遵循——我实际上很困惑为什么 p 是一个 ivar 而不是在设置中声明,这似乎是只放在您需要的地方。

关于ios - Y 坐标未正确更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19739089/

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