求助,关于draw_set_alpha的问题
gamemaker吧
全部回复
仅看楼主
level 6
kh16wlll 楼主
我想在global.n上进行绘制,我是这样写的
//(创建部分)
global.n = surface_create(w,h);
//(绘制部分)
draw_surface(global.n , o_Player.x ,o_Player.y);
surface_set_target(global.n);
gpu_set_blendmode(bm_normal);
draw_set_alpha(0.5);
draw_sprite_ext(sprite,0,x,y,xscale,yscale,rot,col,alpha);
surface_reset_target();
//(几个无关的参数我没有在上边的描述写出来)
我这样写的话(设置绘制透明度0.5了后绘制),就会让所有的image_xscale与image_yscale都等于1的实例显示出来的精灵透明度都变为0.5,这是为什么,该怎么解决
2023年02月16日 15点02分 1
level 15
可能的原因:1. draw_sprite_ext函数用的alpha变量值不为1。2. 由于给的代码不全,就目前有的看,draw_set_alpha会应用于下一次draw_surface。3. 因为surface的背景默认是透明的,即alpha=0,和直接绘制时默认alpha=1不同,在surface上使用bm_normal绘制alpha不为1的图形得到的结果表现与直接绘制时不同的。
2023年02月19日 07点02分 2
吧务
level 13
纠正一个误区:draw_set_alpha会对接下来所有的绘制过程生效(而不是接下来的一次)。在找不到alpha设置回1的代码情况下,只能暂且认为“所有的东西都在以0.5的alpha绘制”。那其实更可怕的是有些东西经过了两次绘制才显示到屏幕(一次是原图到表面,一次是表面到屏幕),会变得“更加透明”。如果继续考虑bm_normal对于alpha计算本身的不合理,以及题主的draw clear方式,实际显示的内容可能和题主的预期差距很大。
2023年02月20日 05点02分 3
另外,draw sprite ext里是有alpha参数的,咱没验证过和draw set alpha是乘法计算还是优先覆盖,在咱的逻辑里这两个就不会放一起用。
2023年02月20日 05点02分
@q糖豆p 两码事。
2023年02月28日 00点02分
@圭臬乃 那你来解释一下题主问的是哪一码事。
2023年02月28日 03点02分
1