DanmakuFlameMaster icon indicating copy to clipboard operation
DanmakuFlameMaster copied to clipboard

在不过滤且设置固定的行数(2行或者3行)的情况下,怎么实现让弹幕之间都不碰撞,即在屏幕上弹幕不重叠。

Open a1506766443 opened this issue 8 years ago • 12 comments

我想实现,弹幕固定最大显示3行,手机打得所有弹幕都不过滤,都在屏幕上显示出来,且弹幕不会重叠。既我 同时 发4条弹幕 ,先绘制3条弹幕在屏幕上显示3行,等3行中有一行要绘制的弹幕绘制完了,这行再去绘制第四条弹?

a1506766443 avatar May 18 '16 06:05 a1506766443

没提供很好的方法。 addDanmaku之前调整time,错开。

ctiao avatar May 18 '16 07:05 ctiao

这样,同时发送弹幕很多的话,要累加计算好多时间。好的谢谢了哈,我试一试。

a1506766443 avatar May 18 '16 08:05 a1506766443

请问你这个问题解决了吗,我也遇到这个问题了

huohu1007 avatar May 18 '16 09:05 huohu1007

如果可以过滤的话,就不会重叠,我是在可以过滤的前提下,把过滤漏掉的又加进去重新绘制弹幕。这样不断的循环加。

a1506766443 avatar May 18 '16 09:05 a1506766443

@a1506766443 具体步骤是怎么样呢,我也需要做到跟你一样的效果,不丢失数据,且不能重叠,怎么判断哪个数据是被漏掉的呢?

hp-xiaomage avatar Oct 17 '16 09:10 hp-xiaomage

大家实现了吗,我也需要

lizheng98 avatar Mar 09 '17 10:03 lizheng98

怎么去判断当前还不能去添加弹幕已达到防止弹幕重叠的效果 我也没找到相应的接口

wwzlp avatar Jul 25 '17 08:07 wwzlp

不好意思,刚看到,之前修改时写的,再遇见此问题的可以参考下: 修改源码: 110:C:\Users\Administrator\Desktop\Danmaku\src\master\flame\danmaku\danmaku\model\BaseDanmaku.java 在BaseDanmaku中加一个属性字段:-----通过判断该字段判断是否被过滤 public boolean canDraw = false; 111: //当被过滤掉时drawItem.isFiltered()==ture 会执行此方法-----我们修改改item的变量为true if (drawItem.time < startRenderTime || (drawItem.priority == 0 && drawItem.isFiltered())) { Log.d("zssf", "RenderingState draw text : " + drawItem.text); if (!drawItem.canDraw) { drawItem.canDraw = true; } continue; }

112:C:\Users\Administrator\Desktop\Danmaku\src\master\flame\danmaku\controller\DrawTask.java

    

113.C:\Users\Administrator\Desktop\Danmaku\src\master\flame\danmaku\danmaku\model\android\Danmakus.java 接口位置:C:\Users\Administrator\Desktop\Danmaku\src\master\flame\danmaku\danmaku\model\IDanmakus.java public interface IDanmakus {} Danmakus中添加adjustItems方法 ----对应的接口中也要注册该方法 ----- public void adjustItems(Context mContext);

public void adjustItems(Context mContext) {

    Collection<BaseDanmaku> tmps = new ArrayList<BaseDanmaku>();
    for (BaseDanmaku danmaku : items) {
        if (danmaku.canDraw) {
            Intent intent = new Intent("com.danmaku.add");
            intent.putExtra("text", danmaku.text);
            intent.putExtra("textColor", danmaku.textColor);
            mContext.sendBroadcast(intent);
            Log.e("zssf", "text: " + danmaku.text + ", time: " + danmaku.time + ", id: " + danmaku);

        } else {
            tmps.add(danmaku);
        }
    }

    items.clear();
    items.addAll(tmps);
    mSize = items.size();
    tmps.clear();
    tmps = null;

}

115: 修改了弹幕停顿

116:C:\Users\Administrator\Desktop\Danmaku\src\master\flame\danmaku\controller\DrawTask.java

AndriodDisplayer中drawDanmaku里的对应方法中修改

a1506766443 avatar Dec 13 '17 06:12 a1506766443

有几张图片,好像贴不出来。就这样吧

a1506766443 avatar Dec 13 '17 06:12 a1506766443

大佬们,我么现在也是这个需求,求指教

SWAGL avatar Apr 29 '19 08:04 SWAGL

大家实现了吗,我也需要

您最后实现这个弹幕了吗?求指教,谢谢拉,方便的话加一下微信可以吗gyt869144152

SWAGL avatar Apr 29 '19 08:04 SWAGL

蛋疼,这个库 真他么不友好啊

baiyingbin avatar Apr 29 '19 08:04 baiyingbin