Cocos2d does truncate pixels to integers. I subclassed Sprite to modify a few 
methods to make it use Floats.:

    # Copied from cocos.sprite, and modified to use Float coordinates.
    def _create_vertex_list(self):
        if self._batch is None:
            self._vertex_list = graphics.vertex_list(4,
                'v2f/%s' % self._usage,
                'c4B', ('t3f', self._texture.tex_coords))
        else:
            self._vertex_list = self._batch.add(4, GL_QUADS, self._group,
                'v2f/%s' % self._usage,
                'c4B', ('t3f', self._texture.tex_coords))
        self._update_position()
        self._update_color()

    # Copied from cocos.sprite, and modified to use Float coordinates.
    def _update_position(self):
        """updates vertex list"""
        if not self._visible:
            self._vertex_list.vertices[:] = [0, 0, 0, 0, 0, 0, 0, 0]
            return

        img = self._texture
        if self.transform_anchor_x == self.transform_anchor_y == 0:
           if self._rotation:
               x1 = -self._image_anchor_x * self._scale
               y1 = -self._image_anchor_y * self._scale
               x2 = x1 + img.width * self._scale
               y2 = y1 + img.height * self._scale
               x = self._x
               y = self._y

               r = -math.radians(self._rotation)
               cr = math.cos(r)
               sr = math.sin(r)
               ax = int(x1 * cr - y1 * sr + x)
               ay = int(x1 * sr + y1 * cr + y)
               bx = int(x2 * cr - y1 * sr + x)
               by = int(x2 * sr + y1 * cr + y)
               cx = int(x2 * cr - y2 * sr + x)
               cy = int(x2 * sr + y2 * cr + y)
               dx = int(x1 * cr - y2 * sr + x)
               dy = int(x1 * sr + y2 * cr + y)

               self._vertex_list.vertices[:] = [ax, ay, bx, by, cx, cy, dx, dy]
           elif self._scale != 1.0:
               x1 = int(self._x - self._image_anchor_x * self._scale)
               y1 = int(self._y - self._image_anchor_y * self._scale)
               x2 = int(x1 + img.width * self._scale)
               y2 = int(y1 + img.height * self._scale)
               self._vertex_list.vertices[:] = [x1, y1, x2, y1, x2, y2, x1, y2]
           else:
               x1 = int(self._x - self._image_anchor_x)
               y1 = int(self._y - self._image_anchor_y)
               x2 = x1 + img.width
               y2 = y1 + img.height
               self._vertex_list.vertices[:] = [x1, y1, x2, y1, x2, y2, x1, y2]
        else:
            x1 = - self._image_anchor_x
            y1 = - self._image_anchor_y
            x2 = x1 + img.width
            y2 = y1 + img.height
            m = self.get_local_transform()
            p1 = m * euclid.Point2(x1, y1)
            p2 = m * euclid.Point2(x2, y1)
            p3 = m * euclid.Point2(x2, y2)
            p4 = m * euclid.Point2(x1, y2)

            self._vertex_list.vertices[:] = [
                p1.x, p1.y, p2.x, p2.y,
                p3.x, p3.y, p4.x, p4.y]



On May 20, 2011, at 2:49 AM, Olof Nilsson wrote:

> I've started using Cocos2d (v0.4.0) recently and encountered the same
> problem as mentioned in the qouted year-old post below. It can be seen
> in the test_tiles.py example, especially if you increase the max
> speed. Basically the scrolling "jitters" when in motion.
> 
> Is there a better approach to smooth scrolling, or is this a problem
> with ScrollingManager?
> 
> qouted:
> "
> I've noticed in both the 0.3 and svn cocos that scrolling with moving
> sprites sometimes causes weird "vibration" rendering glitches which
> look like a one pixel error interpolation issue or something.  If you
> zoom in on the car in the test_tiles while it is scrolling and
> rotated
> you will notice it vibrates.
> I found this issue making a very low resolution game where I was
> trying to use the MoveTo action to move a sprite while focusing on
> that sprite every frame. The sprite would jump back and forth a pixel
> while it was moving in the same direction the scrolling manager was
> scrolling.  If I manually moved the sprite with a velocity it would
> have the same problem, but only when the call to set_focus was in the
> layer's scheduled update or some higher level.  If i put the
> set_focus
> immediately after the sprite position change in the sprite's
> scheduled
> update method the vibrating would stop for that sprite but other
> moving sprites in the scene would still have the problem.
> Putting the test_tiles scroller.set_focus(car.x, car.y) in a new
> scheduled update in the main scene separate from the car's update
> causes the vibration to occur when moving without rotation as well.
> I've been trying to track down this bug, but I admit not knowing
> where
> to look. I am wondering if inting or rounding floats to pixels
> somewhere is causing the problem but changing the int conversions in
> the scrolling manager back to floats didn't do anything. Or perhaps
> the ordering of update, transform, and draw somewhere is causing
> problems?
> "
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "cocos2d discuss" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/cocos-discuss?hl=en.
> 

-- 
You received this message because you are subscribed to the Google Groups 
"cocos2d discuss" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cocos-discuss?hl=en.

Reply via email to