如何动态改变用DrawNode绘制的图形的透明度?

要在屏幕上画一条直线,并且这条线要淡入淡出. 这样的功能如何实现? (效果类似红警中的激光)
也就是说,画图形(不止是直线,包括圆,矩形等)的时候,除了在开始的时候设置透明度,当画好之后还能改透明度吗? 我试了一下, 下面的代码不起作用.

local drawNode = display.newDrawNode()
local line = drawNode:drawLine({x1,y1}, {x2,y2})
line:addTo(args.scene)
local sequence = transition.sequence({
CCFadeIn:create(1.0),
CCFadeOut:create(1.0),
CCCallFunc:create(function ()
line:removeSelf()
end)
})
line:runAction(sequence)

如果不能用引擎自带的绘制图形的办法, 那么用图片可以实现吗?怎么做?

drawNode:runAction试试?

也不起作用. 其实drawNode和line是等价的,drawNode:drawLine函数返回的是self

嗯,可能是不行,因为drawNode是本来就是绘制的,和一般图片精灵不同。
要达到你需要的效果,看来只有先绘制好两根线,轮流进行显示和隐藏了。

用一个计时器绘制不同透明度的线条,是不是更简单些?

可以走截图原理,保存线的纹理到一个sprite里面,然后调用这个sprite的runAction()

CCFadeIn是通过setOpacity()改变透明度的,但是CCDrawNode内部只继承了个接口,并没有真正实现setOpacity()的功能。

local drawNode = display.newDrawNode()
drawNode:drawLine({10,10}, {100,100}, 1, ccc4f(1, 1, 1, 1))
drawNode:addTo(self)
drawNode:setColor(ccc3(255, 0, 0))  -- 无效果
drawNode:setOpacity(0)                      -- 无效果

楼主,这个问题解决了么

这样用,比如你创建了一个DrawNode,然后绘制了一些东西,要想动态改变绘制内容的话,先调用DrawNode里面的clear()函数,然后重新绘制即可。