2014-06-05 6 views
0

신참 여기에 초점이 반대 방향으로 계층 이동의 볼 부분, 나는 2 차원의 주위에 스크롤 ScrollingManager의 set_focus(x, y) 방법을 사용하고 있습니다적인 Cocos2D 0.6.0 파이썬에서 :)적인 Cocos2D/파이썬 :

을 게임을 만들려고 노력 타일 ​​맵. 관련된 레이어는 올바르게 스크롤되는 것처럼 보이지만 반대 레이어로 이동하는 창 (512x512)과 동일한 크기 인 일부 레이어가 내 레이어를 부분적으로 가리고있는 것 같습니다. 이걸 어떻게 없앨 수 있습니까?

나는 최고의 이런 식으로 시각화 할 수 있습니다 : 참고로

Screenshot 1: initial focus at startup, all layers visible

Screenshot 2: layers seem cropped after scrolling down

, 내가 파이썬에 대한적인 Cocos2D 0.6.0 ScrollingManager 클래스를 사용하고 있습니다.

[편집] 테스트 할 수있는 독립형 스크립트를 만들었습니다.

import pyglet 
from pyglet.window import key, mouse 
import cocos 
from cocos import tiles, actions, layer 
import random 

def main(): 
    global mouse, scroller 
    global fx, fy, winx, winy, offsetx, offsety 

    # map size (cells) 
    hsize = 128 
    vsize = 128 

    # window size (pixels) 
    winx = 960 
    winy = 640 

    # coordinates of screen focus 
    fx = 0 
    fy = 0 

    from cocos.director import director 
    director.init(width=winx, height=winy, do_not_scale=True, resizable=True) 

    offsetx = hsize * 16 - winx 
    offsety = vsize * 16 - winy 

    ################################## 
    ### creation of randomized map ### 
    ################################## 

    tileset = {} 
    # a 16x16 pixel tile (blue, represents water) 
    tileset['water'] = pyglet.image.ImageGrid(pyglet.image.load('resources/water.png'), 4, 4) 
    # a 16x16 pixel tile (green, represents land) 
    tileset['land'] = pyglet.image.ImageGrid(pyglet.image.load('resources/land.png'), 4, 4) 

    # empty 2D array holding RectCells 
    cellMatrix = [ [None]*hsize for i in range(vsize) ] 

    # filling of array 
    for v in range(vsize): 
    for h in range(hsize): 
     if random.random() < 0.5: 
     image = tileset['water'][1] 
     else: 
     image = tileset['land'][1] 

     tile = cocos.tiles.Tile('test', {}, image, None) 

     cellMatrix[v][h] = cocos.tiles.RectCell(h*16, v*16, 1, 1, None, tile) 

    ################################## 
    ### end of creating random map ### 
    ################################## 

    # creating rectMapLayer from cell array 
    rectMapLayer = cocos.tiles.RectMapLayer('test', 16, 16, cellMatrix, None, {}) 

    scroller = cocos.layer.ScrollingManager() 
    scroller.add(rectMapLayer, 0, 'test') 
    main_scene = cocos.scene.Scene(scroller) 

    def on_mouse_motion(x, y, dx, dy): 

    global fx, fy, offsetx, offsety, winx, winy 

    if x > winx - 16: 
     fx = min(offsetx, fx + 16) 

    if x < 16: 
     fx = max(0, fx - 16) 

    if y > winy - 16: 
     fy = min(offsety, fy + 16) 

    if y < 16: 
     fy = max(0, fy - 16) 

    scroller.set_focus(fx + winx/2, fy + winy/2, force=True) 

    director.window.push_handlers(on_mouse_motion) 

    director.run(main_scene) 

# run game 
if __name__ == '__main__': 
    main() 

답장을 보내 주셔서 감사합니다.

답변

0

같은, 각각의 층에 대한 뷰를 변경하여 문제를 해결 :

rectMapLayer = cocos.tiles.RectMapLayer('test', 16, 16, cellMatrix, None, {}) 

scroller = cocos.layer.ScrollingManager() 

scroller.add(rectMapLayer, 0, 'test_layer') 

# focus coordinates 
x = 50 
y = 50 

scroller.get('test_layer').set_view(0, 0, 1024, 1024, -x, -y) 

이 테스트 층은 너비/높이 1024 × 1024으로 (0, 0), 원점에서의 뷰를 설정하게되며, 오프셋 -x, -y.