2013-06-05 2 views
2

Вот мой Кокосовые код:проблема с отображением спрайтов в cocos2d

class Startbox(Layer): 

def __init__(self): 
    Layer.__init__(self) 

    self.batch = BatchNode() 

    self.add(self.batch) 

    img = pyglet.image.load('images/map_sprites.png') 

    tileset = pyglet.image.ImageGrid(img, 3, 15, 96, 96) 

    x, y = 0, 0 

    for i in range(10): 

     for j in range(10): 

      spr = Sprite(tileset[1]) 
      spr.x = x 
      spr.y = y 

      self.batch.add(spr) 

      x += 96 
     y += 96 
     x = 0 

Я пытаюсь получить спрайт и дисплей бок о бок, чтобы покрыть окно. Этот код производит дефектный результат, плитки имеют пространство между ними, как это:

notice the black lines

Я не понимаю, почему это происходит, и как это исправить. Следующий код pyglet делает в основном то же самое, но с спрайтов правильно выстроены и не создавая никаких черных линий:

class screen(pyglet.window.Window): 

def __init__(self, w, h): 
    super(screen, self).__init__(w, h) 

    sprite_sheet = grid(pyglet.image.load("images/map_sprites.png"), 3, 15) 

    self.batch = pyglet.graphics.Batch() 

    self.all_sprites = [] 

    x, y = 0, 0 

    for i in range(10): 

     for j in range(10):     

      sprite = pyglet.sprite.Sprite(sprite_sheet[1], batch=self.batch) 
      sprite.x = x 
      sprite.y = y 

      self.all_sprites.append(sprite) 

      x += 96 
     y += 96 
     x = 0 



EDIT: Я нашел решение, и хотел опубликовать его как ответ для ясности в случае, если кто-то наткнется на это в будущем, но я думаю, что редактирование моего ОП будет достаточно.

От Клаудио Canepa в Cocos2d Google groups списке:

Вы можете попробовать прохождение do_not_scale = True в вызове director.init, это будет использовать ortographic выступ, который лучше подходит для плитки.

Вы можете посмотреть примеры для Кокосовые tilemaps в сценариях
test_tiles.py
test_tmx.py
test_platformer.py

Реализация ультра проста:

if __name__ == '__main__': 
    director.init(width, height, do_not_scale=True) 
    director.run(Scene(Startbox())) 
+0

литой координаты целых – LearnCocos2D

+0

Что вы имеете в виде? –

+0

убедитесь, что координаты x/y всех плит не имеют компонента с плавающей запятой, то есть 1.2345 -> 1.0 Не знаю, как выполняется кастинг в python, но по крайней мере должна быть функция floor(). – LearnCocos2D

ответ

1

Не работал в python-версии cocos2d, но наблюдался в iPhone версии cocos2d. Так что это может помочь: -

«Если SpriteSheet создан с помощью Zwoptex, то добавьте пробел между sprite и 2px +.

«Редактировать ccConfig.h файл и определить это

#ifndef CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 
#define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 1 
#endif 

См моего ответ на это: Thread in Stackoverflow

Смежные вопросы