限制区域内绘制 已解决
jojowo379 发表于 2020-04-30 12:59:48 393

有蓝绿两种区域

在其中绘制红色实心圆,当圆心处于何种区域,便只在哪个区域绘制,效果如下


请问这种效果应该怎样实现呢?

Tips:实际遇到的情况

最后于 2月前 被jojowo379编辑 ,原因:
最新回复 (9)
  • 摸魔抹莫 发表于 2020-04-30 03:40:46
    1 2
    如果蓝色矩形、绿色矩形、红色圆形三者的绘制顺序不影响游戏其他部分的话,您就不需要一定首先绘制蓝色和绿色矩形,然后绘制圆形。可以在绘制之前计算红色圆形的圆心位置,如在下部分则按照绿色矩形-红色圆形-蓝色矩形顺序绘制,否则按照蓝色矩形-红色圆形-绿色矩形顺序绘制即可实现所需效果。
    如果确实需要首先绘制蓝色和绿色矩形,然后绘制红色圆形,否则会影响游戏的其他部分的话,则建议使用表面。创建一个与红色圆形等宽高的表面,然后计算红色圆形圆心位置并在表面上相应位置作出绘制,超出表面部分的绘制则不会有作用,这样表面就“裁剪”下了红色圆形的所需要部分,随后再把表面绘制在两个矩形上,看上去就像是红色圆形被两个矩形中的一个覆盖了一样。
  • jojowo379 发表于 2020-04-30 07:20:52
    0 3
    摸魔抹莫 如果蓝色矩形、绿色矩形、红色圆形三者的绘制顺序不影响游戏其他部分的话,您就不需要一定首先绘制蓝色和绿色矩形,然后绘制圆形。可以在绘制之前计算红色圆形的圆心位置,如在下部分则按照绿色矩形-红色圆形-蓝色 ...
    非常感谢您的回答,我刚刚更新了这个问题的详细描述,蓝绿两种区域实际的交互会复杂一些(分界线可能会是不规则曲线),然后让一个对象的效果限制在一个区域内,超出区域的部分便不再绘制。
  • 摸魔抹莫 发表于 2020-04-30 09:17:21
    1 4
    jojowo379 非常感谢您的回答,我刚刚更新了这个问题的详细描述,蓝绿两种区域实际的交互会复杂一些(分界线可能会是不规则曲线),然后让一个对象的效果限制在一个区域内,超出区域的部分便不再绘制。
    那么,如果蓝色图形、绿色图形、红色圆形三者的绘制顺序不影响游戏其他部分的话,方案一大体思路不变;
    否则,建议使用混色术,在与之等大的表面上绘制红色圆形,然后改变混色因子组合为bm_subtract,再把不出现红色圆形的那部分图形(如例图中蓝色图形)绘制到表面上,擦除掉表面上的那部分内容,红色圆形就被改变为所需的形状。然后再恢复混色因子,最后再把表面绘制到所需位置即可。
  • yunzl 发表于 2020-05-02 12:35:45
    1 5
    可以使用surface进行操作,以透明度0绘制会擦掉内容
  • 末落X 发表于 2020-05-04 08:27:40
    1 6
    用surface啊
  • 天使的糖豆 发表于 2020-05-20 03:58:51
    1 7
    方案A:蓝绿分开做
    0、蓝色和绿色是两个不同的sprite(或image)
    1、绘制顺序是蓝-绿-取圆心处的坐标判定颜色-红-根据判定重新画绿或蓝
    方案B:蓝绿是一个图形不做分离,此方案允许更多颜色出现
    按咱的预想,这里要使用shader……话说能开始写shader的话这种效果实现起来轻轻松松,不过大部分人似乎是被shader这个硬条件挡住了
  • 天使的糖豆 发表于 2020-05-20 05:32:34
    1 8

  • jojowo379 发表于 2020-05-24 08:58:53
    0 9
    天使的糖豆 方案A:蓝绿分开做 0、蓝色和绿色是两个不同的sprite(或image) 1、绘制顺序是蓝-绿-取圆心处的坐标判定颜色-红-根据判定重新画绿或蓝 方案B:蓝绿是一个图形不做分离,此方案允许更多 ...
    非常感谢您的回答,原谅我才看到,前些日子照猫画虎了一个shader初级教程,发现用的例子和我的这个遮挡问题契合度蛮高的。话说GMS稍微深入一点的教程真心不多。
  • 宝贝龙 发表于 2020-06-01 08:05:46
    0 10
    似乎限制区域绘制可以用回执表面实现