gpt4 book ai didi

ios - SpriteKit - 沿一个方向缩放

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

在 SpriteKit 中,如何让一个对象向一个方向生长?

最终,我想在用户触摸的地方插入一个节点,并让线的每一端缩放,直到它碰到同一类别的另一个对象或碰到屏幕的边缘。我知道如何让它在一个轴上缩放,然后我可以在检测到一次碰撞后取消缩放,但我希望两个方向独立缩放,直到每个方向都发生碰撞。我是 SpriteKit 的新手,所以我的搜索可能使用了错误的术语,但我找不到任何相关的内容。

在用户触摸的地方添加“墙”的代码

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch * touch in touches) {
CGPoint location = [touch locationInNode:self];
[self addWallAtLocation:location];
}
}

-(void)addWallAtLocation:(CGPoint)location{

int odd_or_even = arc4random() % 2;

SKSpriteNode * wall = [SKSpriteNode spriteNodeWithColor:[UIColor whiteColor] size:CGSizeMake(2, 2)];
wall.position = location;

wall.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(2, 2)];
wall.physicsBody.dynamic = NO;
wall.physicsBody.categoryBitMask = wallCategory;
wall.physicsBody.contactTestBitMask = ballCategory;

[self addChild:wall];

SKAction * grow;

if (odd_or_even == 1) {
grow = [SKAction scaleYTo:300 duration:2];
} else {
grow = [SKAction scaleXTo:300 duration:2];
}

[wall runAction:grow];
}

enter image description here

我希望它如何工作:Touch 1 从一个点开始在 x 轴的两个方向上射出一条水平线,直到两端都碰到屏幕的边缘。然后 Touch 2 将创建一个点,该点在 y 轴上的两个方向上射出,直到下端碰到 Touch 1 创建的墙壁并且上端碰到屏幕边缘。线条(缩放点)在用户触摸的地方生成。所以我不希望红色框突出显示的垂直线部分在那里。

在一个方向上缩放只是我看到的这个问题的一种解决方案,如果有更好的解决方法,我一定会尝试其他解决方案。

最佳答案

编辑更新的问题:听起来您可能会问“如何在单个轴上缩放一个物体,然后仅当它与另一个物体碰撞时才停止在一个方向上缩放该单个轴”?没有一种简单的方法可以只使用 Action 来做到这一点,但您可以通过操纵 Sprite 的 anchor 来做一些小手。或者,可能更合适的是,每次触摸您应该使用 2 个 Sprite ,一个 Action 将一个向北发送,另一个 Action 将另一个向南发送。可能是这样的:

-(void)someMethod{

SKSpriteNode *touch2TopPart = [SKSpriteNode node];
SKSpriteNode *touch2BottomPart = [SKSpriteNode node];
touch2TopPart.anchorPoint = CGPointMake(.5, 0);
touch2BottomPart.anchorPoint = CGPointMake(.5, 1);

touch2TopPart.name = @"touch2TopPart";
touch2BottomPart.name = @"touch2BottomPart";

SKAction *sendTopPartUp = [SKAction scaleYTo:100 duration:2];
SKAction *sendBottomPartDown = [SKAction scaleYTo:100 duration:2];

[touch2TopPart runAction:sendTopPartUp withKey:@"sendTopPartUp"];
[touch2BottomPart runAction:sendBottomPartDown withKey:@"sendBottomPartDown"];

}

-(void)whateverTheCollisonMethodIsCalledBetweenThingAandThingB
{
SKSpriteNode *somePartMovingInASingleDirection = thingAOrWhatever;

[somePartMovingInASingleDirection removeAllActions];

}

---原始答案我不太确定你在问什么,但你已经有了在 X 或 Y 中缩放的操作,所以这里是在模拟物理后删除其中一个操作的简单用法。您可能正在寻找如何检测两个实体之间的特定碰撞,但我不确定。

-(void)someMethod{

SKSpriteNode *thisSprite = [SKSpriteNode node];

thisSprite.name = @"spriteRunningActions";

SKAction *growX = [SKAction scaleXTo:100 duration:2];
SKAction *growY = [SKAction scaleYTo:100 duration:2];

[thisSprite runAction:growX withKey:@"actionCurrentlyScalingX"];
[thisSprite runAction:growY withKey:@"actionCurrentlyScalingY"];

}

-(void)didSimulatePhysics
{
SKSpriteNode *thatSprite = (SKSpriteNode*)[self childNodeWithName:@"spriteRunningActions"];

//stop a given action
[thatSprite removeActionForKey:@"actionCurrentScalingX"];
[thatSprite removeActionForKey:@"actionCurrentScalingY"];

}

关于ios - SpriteKit - 沿一个方向缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24472579/

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