Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sprite kit 雪碧套件的Dpad_Sprite Kit - Fatal编程技术网

Sprite kit 雪碧套件的Dpad

Sprite kit 雪碧套件的Dpad,sprite-kit,Sprite Kit,我有兴趣尝试创建一些游戏,即在新的精灵工具包。然而,对于我心目中的游戏,我宁愿使用定向板而不是操纵杆。由于我将从Cocos搬过来,我的旧程序不再有效(dpad也不会)。可悲的是,我还没有得到任何教程,可以帮助实现一个新的雪碧套件(只有欢乐棒)。我想知道并希望是否有人在github中遇到了一个简单的dpad类,或者其他什么东西,或者一个他们想分享的有用链接。谢谢在引入SpriteKit之前,我已经构建了一个基于UIKit的小型游戏引擎。我的引擎从加载cocos2d兼容的地图,从加载精灵,并带有一个

我有兴趣尝试创建一些游戏,即在新的精灵工具包。然而,对于我心目中的游戏,我宁愿使用定向板而不是操纵杆。由于我将从Cocos搬过来,我的旧程序不再有效(dpad也不会)。可悲的是,我还没有得到任何教程,可以帮助实现一个新的雪碧套件(只有欢乐棒)。我想知道并希望是否有人在github中遇到了一个简单的dpad类,或者其他什么东西,或者一个他们想分享的有用链接。谢谢

在引入SpriteKit之前,我已经构建了一个基于UIKit的小型游戏引擎。我的引擎从加载cocos2d兼容的地图,从加载精灵,并带有一个操纵杆,我将其从cocos2d移植到UIKit。(我的基于鬼鬼祟祟的操纵杆。)

你可以把你需要的零件拆下来。它相当模块化。

这里有一种方法:

//Joystick node
- (SKSpriteNode *)controlPadNode
{
    SKSpriteNode *controlPadNode = [SKSpriteNode spriteNodeWithImageNamed:@"game-controller-front"];
    controlPadNode.position = CGPointMake(controlPadX,controlPadY);
    controlPadNode.name = @"controlPadNode";
    controlPadNode.zPosition = 1.0;
    return controlPadNode;
}

//handle touch events
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInNode:self];
    SKNode *node = [self nodeAtPoint:location];

    //if control pad touched
    if ([node.name isEqualToString:@"controlPadNode"]) {
        touchX = location.x;
        touchY = location.y;
        controlButtonDown = true;
    }
}

//when touch moves
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInNode:self];
    SKNode *node = [self nodeAtPoint:location];

    //if control pad touched
    if ([node.name isEqualToString:@"controlPadNode"]) {
        touchX = location.x;
        touchY = location.y;
        controlButtonDown = true;
    }
}

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

    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInNode:self];
    SKNode *node = [self nodeAtPoint:location];

    //if control pad touched
    if ([node.name isEqualToString:@"controlPadNode"]) {
        controlButtonDown = false;
    }
}

//update method
-(void)update:(NSTimeInterval)currentTime {

    if (controlButtonDown) {

        //the control pad
        SKNode *controlNode = [self childNodeWithName:@"controlPadNode"];

        //the node you want to move
        SKNode *node = [self childNodeWithName:@"spaceShipNode"];

        //compute the angle between parameters pad and the horizontal
        float angle = atan2f (touchY - controlPadY, touchX - controlPadX) ;

        //move the control pad for the player to have a sense of movement
        SKAction *moveControlPad = [SKAction moveTo:CGPointMake(touchX, touchY) duration:0.00001];
        double distance = sqrt(pow((touchX - controlPadX), 2.0) + pow((touchY - controlPadY), 2.0));

        //make sure the control pad only moves 40 pixels
        if( distance < 40 ){
            [controlNode runAction:moveControlPad];
        }

        //move the ship
        SKAction *moveShip = [SKAction moveByX: 6*cosf(angle) y:6*sinf(angle) duration:0.005];
        [node runAction: moveShip];        

    }
}

是的,我的是鬼鬼祟祟的操纵杆,它能正常工作吗?seeinf sprite工具包是新的,我一直在安装它,但我在ControlButton上遇到了四个错误,我不确定如何处理。并且像这样初始化touchX和touchY,直到传递了位置。(可接受?)浮动触摸X=0.0;float-touchY=0.0;controlButtonDown有哪些错误?我猜你把它声明为BOOL controlButtonDown?touchX和touchY都很好。不,我没有(犯了一个愚蠢的错误)。我做了这两个修改//touchY=0;和浮动角度=atan2f(0,touchX-controlPadX);(因为我只想让螺旋向左或向右移动)。但是,如果我朝着dpad中心的顶部单击like(希望我解释的是ok),它仍然会向上移动,如果你只想让它向左或向右移动,你不需要任何角度的东西,只需要确定触摸是否在控制板中心的左或右,然后移动精灵。我做了一些非常懒惰的事情。SKAction*moveShip=[SKAction moveByX:6*cosf(角度)y:0持续时间:0.005];
if (!controlButtonDown) {
    SKNode *controlNode = [self childNodeWithName:@"controlPadNode"];
    SKAction *moveControlPad = [SKAction moveTo:CGPointMake(controlPadX, controlPadY) duration:0.00001];
    [controlNode runAction:moveControlPad];
}