gpt4 book ai didi

ios - "How To Make a Tile-Based Game with Cocos2D 2.X"使用cocos2d V3制作本教程

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:08 24 4
gpt4 key购买 nike

我有一个小问题。在本教程中 How To Make a Tile-Based Game with Cocos2D 2.X使用cocos2d V2.0,我想在cocos2d V3.0中制作这个。所以,这是行不通的!谢谢! (我不会说英语)

我认为这一行有问题 - self.position = viewPoint;

@property (strong) CCTiledMap *tileMap;
@property (strong) CCTiledMapLayer *background;
@property (strong) CCSprite *player;



- (id)init
{
// Apple recommend assigning self with supers return value
self = [super init];
if (!self) return(nil);

// Enable touch handling on scene node
self.userInteractionEnabled = YES;

self.tileMap = [CCTiledMap tiledMapWithFile:@"TileMap.tmx"];
self.background = [_tileMap layerNamed:@"Background"];
[self addChild:_tileMap z:-1];

CCTiledMapObjectGroup *objectGroup = [_tileMap objectGroupNamed:@"Objects"];
NSAssert(objectGroup != nil, @"tile map has no objects object layer");

NSDictionary *spawnPoint = [objectGroup objectNamed:@"SpawnPoint"];
int x = [spawnPoint[@"x"] integerValue];
int y = [spawnPoint[@"y"] integerValue];

_player = [CCSprite spriteWithImageNamed:@"Player.png"];
_player.position = ccp(x,y);

[self addChild:_player];
[self setViewPointCenter:_player.position];

// done
return self;
}


- (void)setViewPointCenter:(CGPoint) position {

CGSize winSize = [CCDirector sharedDirector].viewSize;

int x = MAX(position.x, winSize.width/2);
int y = MAX(position.y, winSize.height/2);
x = MIN(x, (_tileMap.mapSize.width * _tileMap.tileSize.width) - winSize.width / 2);
y = MIN(y, (_tileMap.mapSize.height * _tileMap.tileSize.height) - winSize.height/2);
CGPoint actualPosition = ccp(x, y);

CGPoint centerOfView = ccp(winSize.width/2, winSize.height/2);
CGPoint viewPoint = ccpSub(centerOfView, actualPosition);

self.position = viewPoint;
}

-(void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
CGPoint touchLocation = [touch locationInView:touch.view];
touchLocation = [[CCDirector sharedDirector] convertToGL:touchLocation];
touchLocation = [self convertToNodeSpace:touchLocation];

CGPoint playerPos = _player.position;
CGPoint diff = ccpSub(touchLocation, playerPos);

if ( abs(diff.x) > abs(diff.y) ) {
if (diff.x > 0) {
playerPos.x += _tileMap.tileSize.width;
} else {
playerPos.x -= _tileMap.tileSize.width;
}
} else {
if (diff.y > 0) {
playerPos.y += _tileMap.tileSize.height;
} else {
playerPos.y -= _tileMap.tileSize.height;
}
}

CCLOG(@"playerPos %@",CGPointCreateDictionaryRepresentation(playerPos));

// safety check on the bounds of the map
if (playerPos.x <= (_tileMap.mapSize.width * _tileMap.tileSize.width) &&
playerPos.y <= (_tileMap.mapSize.height * _tileMap.tileSize.height) &&
playerPos.y >= 0 &&
playerPos.x >= 0 )
{
[self setPlayerPosition:playerPos];
}

[self setViewPointCenter:_player.position];
NSLog(@"%@", NSStringFromCGPoint(touchLocation));
}

-(void)setPlayerPosition:(CGPoint)position {
_player.position = position;
}

最佳答案

问题是用户交互的区域默认绑定(bind)到场景的 contentSize(屏幕尺寸)。

调用 setViewPointCenter 方法时,您会将场景位置移出未处理触摸事件的区域。

您必须像这样扩展瓦片 map 的 contentSize 区域:

[self setContentSize:[_tileMap contentSize]];
self.userInteractionEnabled = YES;

关于ios - "How To Make a Tile-Based Game with Cocos2D 2.X"使用cocos2d V3制作本教程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21377795/

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