Objective c SpriteKit在检测触点开始后检测触点结束
这就是我试图实现的目标: 场景中有两个精灵节点,self是一个边循环 如果nodeA碰到nobeB,请停止。>>赢 如果nodeA碰到self.>>失去 如果nodeA触摸nobeB但没有停下来触摸self.>>失去 因此,我需要这样的东西:Objective c SpriteKit在检测触点开始后检测触点结束,objective-c,xcode,sprite-kit,Objective C,Xcode,Sprite Kit,这就是我试图实现的目标: 场景中有两个精灵节点,self是一个边循环 如果nodeA碰到nobeB,请停止。>>赢 如果nodeA碰到self.>>失去 如果nodeA触摸nobeB但没有停下来触摸self.>>失去 因此,我需要这样的东西: typedef NS_OPTIONS(aero, SpriteNodeCategory) { SpriteNodeCategoryA = 1 << 0, SpriteNodeCategoryB = 1 <<
typedef NS_OPTIONS(aero, SpriteNodeCategory)
{
SpriteNodeCategoryA = 1 << 0,
SpriteNodeCategoryB = 1 << 1,
};
-(void)didBeginContact:(SKPhysicsContact *)contact
{
aero collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (SpriteNodeCategoryA|SpriteNodeCategoryB)) {
//something here I don't know...
}
if (collision == (SpriteNodeCategoryA|SpriteNodeCategoryB)) {
NSLog(@"FAIL");
}
}
typedef NS_选项(aero、SpriteNodeCategory)
{
SpriteNodeCategoryA=1您有另一个方法委托(SKPhysicContactDelegate),它执行您询问的任务:
- (void)didEndContact:(SKPhysicsContact *)contact
您还有另一个方法委托(SKPhysicContactDelegate),它执行您询问的任务:
- (void)didEndContact:(SKPhysicsContact *)contact
您还有另一个方法委托(SKPhysicContactDelegate),它执行您询问的任务:
- (void)didEndContact:(SKPhysicsContact *)contact
您还有另一个方法委托(SKPhysicContactDelegate),它执行您询问的任务:
- (void)didEndContact:(SKPhysicsContact *)contact
好吧,这会有点困难
首先,您可以使用“didSimulatePhysics”获取模拟的更新
-(void)didSimulatePhysics
{
if (_yourNode.physicsBody.angularVelocity == 0 && newGame) {
if (_yourNode.userData[@"winningCondition"]) {
[self win];
};
}
}
这是因为它会更新并查看您是否有一个获胜的条件-这是从碰撞中获得的(想想:逆向工程)
p.S._yourNode.physicsBody.angularVelocity==0表示节点完全静止
-(void)didBeginContact:(SKPhysicsContact *)contact
{
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryNodeB)) {
_yourNode.userData = [@{@"winningCondition":@(YES)} mutableCopy];
}
if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryEdge)) {
[self lose];
}
}
-(void)didEndContact:(SKPhysicsContact *)contact
{
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryNodeB)) {
_yourNode.userData = [@{@"winningCondition":@(NO)} mutableCopy];
}
}
因此,基本上,当A触碰B时,它会通过向节点添加“userData”为您提供一个获胜的条件
剩下的很简单。我想你明白了。好的,所以这会有点困难
首先,您可以使用“didSimulatePhysics”获取模拟的更新
-(void)didSimulatePhysics
{
if (_yourNode.physicsBody.angularVelocity == 0 && newGame) {
if (_yourNode.userData[@"winningCondition"]) {
[self win];
};
}
}
这是因为它会更新并查看您是否有一个获胜的条件-这是从碰撞中获得的(想想:逆向工程)
p.S._yourNode.physicsBody.angularVelocity==0表示节点完全静止
-(void)didBeginContact:(SKPhysicsContact *)contact
{
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryNodeB)) {
_yourNode.userData = [@{@"winningCondition":@(YES)} mutableCopy];
}
if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryEdge)) {
[self lose];
}
}
-(void)didEndContact:(SKPhysicsContact *)contact
{
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryNodeB)) {
_yourNode.userData = [@{@"winningCondition":@(NO)} mutableCopy];
}
}
因此,基本上,当A触碰B时,它会通过向节点添加“userData”为您提供一个获胜的条件
剩下的很简单。我想你明白了。好的,所以这会有点困难
首先,您可以使用“didSimulatePhysics”获取模拟的更新
-(void)didSimulatePhysics
{
if (_yourNode.physicsBody.angularVelocity == 0 && newGame) {
if (_yourNode.userData[@"winningCondition"]) {
[self win];
};
}
}
这是因为它会更新并查看您是否有一个获胜的条件-这是从碰撞中获得的(想想:逆向工程)
p.S._yourNode.physicsBody.angularVelocity==0表示节点完全静止
-(void)didBeginContact:(SKPhysicsContact *)contact
{
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryNodeB)) {
_yourNode.userData = [@{@"winningCondition":@(YES)} mutableCopy];
}
if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryEdge)) {
[self lose];
}
}
-(void)didEndContact:(SKPhysicsContact *)contact
{
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryNodeB)) {
_yourNode.userData = [@{@"winningCondition":@(NO)} mutableCopy];
}
}
因此,基本上,当A触碰B时,它会通过向节点添加“userData”为您提供一个获胜的条件
剩下的很简单。我想你明白了。好的,所以这会有点困难
首先,您可以使用“didSimulatePhysics”获取模拟的更新
-(void)didSimulatePhysics
{
if (_yourNode.physicsBody.angularVelocity == 0 && newGame) {
if (_yourNode.userData[@"winningCondition"]) {
[self win];
};
}
}
这是因为它会更新并查看您是否有一个获胜的条件-这是从碰撞中获得的(想想:逆向工程)
p.S._yourNode.physicsBody.angularVelocity==0表示节点完全静止
-(void)didBeginContact:(SKPhysicsContact *)contact
{
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryNodeB)) {
_yourNode.userData = [@{@"winningCondition":@(YES)} mutableCopy];
}
if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryEdge)) {
[self lose];
}
}
-(void)didEndContact:(SKPhysicsContact *)contact
{
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (CNPhysicsCategoryNodeA|CNPhysicsCategoryNodeB)) {
_yourNode.userData = [@{@"winningCondition":@(NO)} mutableCopy];
}
}
因此,基本上,当A触碰B时,它会通过向节点添加“userData”为您提供一个获胜的条件
其余的都很简单。我想你明白了。你是如何把它放到-(void)中的didBeginContact:method?您不需要将其放入didBeginContact:,您需要添加两种方法:didBeginContact:在联系人开始时处理操作和didEndContact:在联系人结束时处理操作。对,我如何将if语句传递给didEndContact?我不知道您想做什么,但是,是的,您可以传递if和您可以像使用didBeginContact一样使用它:区别在于之后调用该方法。如何在两个方法之间传递if语句?能否给出一个代码示例?如何将其放入-(void)didBeginContact:method?您不需要将其放入didBeginContact:,您需要添加两种方法:didBeginContact:在联系人开始时处理操作和didEndContact:在联系人结束时处理操作。对,我如何将if语句传递给didEndContact?我不知道您想做什么,但是,是的,您可以传递if和您可以像使用didBeginContact一样使用它:区别在于之后调用该方法。如何在两个方法之间传递if语句?能否给出一个代码示例?如何将其放入-(void)didBeginContact:method?您不需要将其放入didBeginContact:,您需要添加两种方法:didBeginContact:在联系人开始时处理操作和didEndContact:在联系人结束时处理操作。对,我如何将if语句传递给didEndContact?我不知道您想做什么,但是,是的,您可以传递if和您可以像使用didBeginContact一样使用它:区别在于之后调用该方法。如何在两个方法之间传递if语句?能否给出一个代码示例?如何将其放入-(void)didBeginContact:method?您不需要将其放入didBeginContact:,您需要添加两种方法:didBeginContact:在联系人开始时处理操作和didEndContact:在联系人结束时处理操作。对,我如何将if语句传递给didEndContact?我不知道您想做什么,但是,是的,您可以传递if和您可以像使用didBeginContact一样使用它:区别在于之后调用该方法。如何在两个方法之间传递if语句?能否给出一个代码示例?