我正在制作一款简单的iOS游戏,目标是让屏幕中间有一个天使向四面八方的怪物射箭。当用户点击屏幕时,我想要一个箭头从天使向水龙头方向移动。但是当我点击屏幕时,它会从屏幕的一角移动,而不是从中间移动。这是我的代码:
#import "MyScene.h"
static inline CGPoint rwAdd(CGPoint a, CGPoint b)
{
return CGPointMake(a.x + b.x, a.y + b.y);
}
static inline CGPoint rwSub(CGPoint a, CGPoint b)
{
return CGPointMake(a.x - b.x, a.y - b.y);
}
static inline CGPoint rwMult(CGPoint a, float b)
{
return CGPointMake(a.x * b, a.y * b);
}
static inline float rwLength(CGPoint a)
{
return sqrtf(a.x * a.x + a.y * a.y);
}
static inline CGPoint rwNormalize(CGPoint a)
{
float length = rwLength(a);
return CGPointMake(a.x / length, a.y / length);
}
@implementation MyScene
- (id) initWithSize: (CGSize) size
{
if (self = [super initWithSize:size])
{
self.backgroundColor = [SKColor colorWithRed: 1.0 green: 1.0 blue: 1.0 alpha: 1.0];
SKSpriteNode *angel = [SKSpriteNode spriteNodeWithImageNamed: @"Angel"];
angel.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
angel.xScale = 0.25;
angel.yScale = 0.25;
[self addChild: angel];
}
return self;
}
- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event
{
UITouch * touch = [touches anyObject];
CGPoint location = [touch locationInNode: self];
SKSpriteNode *arrow = [SKSpriteNode spriteNodeWithImageNamed: @"Arrow"];
arrow.xScale = 0.25;
arrow.yScale = 0.25;
SKNode *angel = [self childNodeWithName: @"Angel"];
arrow.position = angel.position;
CGPoint offset = rwSub(location, arrow.position);
[self addChild: arrow];
CGPoint direction = rwNormalize(offset);
CGPoint shootAmount = rwMult(direction, 500);
CGPoint realDest = rwAdd(shootAmount, arrow.position);
float velocity = 480.0/1.0;
float realMoveDuration = self.size.width / velocity;
SKAction *actionMove = [SKAction moveTo: realDest duration: realMoveDuration];
SKAction *actionMoveDone = [SKAction removeFromParent];
[arrow runAction: [SKAction sequence: @[actionMove, actionMoveDone]]];
}
@end
连连呢?感谢。
答案 0 :(得分:0)
进行以下修改:
@implementation MyScene
{
SKSpriteNode *angel; // <- add this
}
- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event
{
UITouch * touch = [touches anyObject];
CGPoint location = [touch locationInNode: self];
SKSpriteNode *arrow = [SKSpriteNode spriteNodeWithImageNamed: @"Arrow"];
arrow.xScale = 0.25;
arrow.yScale = 0.25;
//SKNode *angel = [self childNodeWithName: @"Angel"]; // <- delete this
arrow.position = angel.position;
CGPoint offset = rwSub(location, arrow.position);
[self addChild: arrow];
CGPoint direction = rwNormalize(offset);
CGPoint shootAmount = rwMult(direction, 500);
CGPoint realDest = rwAdd(shootAmount, arrow.position);
float velocity = 480.0/1.0;
float realMoveDuration = self.size.width / velocity;
SKAction *actionMove = [SKAction moveTo: realDest duration: realMoveDuration];
SKAction *actionMoveDone = [SKAction removeFromParent];
[arrow runAction: [SKAction sequence: @[actionMove, actionMoveDone]]];
}