是否可以基于Pixle Shader为JavaFX创建自定义效果?我找到了this文章,但什么是Decora?我找不到任何关于它的信息。
THX
答案 0 :(得分:1)
目前没有 - 在抽象基类Effect.java中,有抽象的包私有方法,如copy(),sync(),update()等。
这里讨论了Decora项目:http://labonnesoupe.org/static/code/。我问过打开JSL,在6个月前开发者OpenJFX线程中制作某种公共API,并被告知,“不,没有计划向公众开放这个api"。” p>
正如您可能知道的那样,OpenJFX正在考虑新的提交者,这是有效的,我相信您签署Oracle贡献者协议的前提,并且通过懒惰的共识投票。也许这将把这个急需的领域分流到生活中。
在我自己的2D游戏中,我使用Guassian Blurs和Blooms来强调法术攻击,我相信Decora用于开发这些效果。然而,它们可怜的慢。在10系列NVidia显卡上将我的FPS从大约250降至大约30。我很乐意看到改进。
我通过电子邮件向Chris Campbell(Labonnesoupe的作者)询问了他关于JavaFX着色器的工作,但他通过电子邮件回复说我是在8年多前,并且他没有了解最新版本。对网络的搜索显示,所有对Decora的引用现在都很古老。
答案 1 :(得分:0)
使用libgdx。它免费且可在Web HTML 5 webgl,ios,android,所有桌面上运行,并具有完整的着色器支持
答案 2 :(得分:0)
从理论上讲,可以在JavaFx中创建自定义效果,但是使用u可能不喜欢的方式...抽象类javafx.scene.effect.Effect
内部有内部方法,没错!但是基于内部意味着“打包私有”这一事实,我们可以执行以下操作!在您的项目中,创建一个与Effect类相同的名为“ javafx.scene.effect”的新程序包,并在此新创建的程序包中创建您扩展了javafx.scene.effect.Effect
的自定义效果类,即您拥有了自定义JavaFx影响!!!
自定义效果类营地:
package javafx.scene.effect;
import com.sun.javafx.geom.BaseBounds;
import com.sun.javafx.geom.Rectangle;
import com.sun.javafx.geom.transform.BaseTransform;
import com.sun.javafx.scene.BoundsAccessor;
import com.sun.scenario.effect.FilterContext;
import com.sun.scenario.effect.ImageData;
import javafx.scene.Node;
public class MyEffect extends javafx.scene.effect.Effect
{
public MyEffect()
{
}
@Override
com.sun.scenario.effect.Effect impl_createImpl()
{
return new com.sun.scenario.effect.Effect()
{
@Override
public boolean reducesOpaquePixels()
{
// TODO Auto-generated method stub
return false;
}
@Override
public BaseBounds getBounds(BaseTransform transform, com.sun.scenario.effect.Effect defaultInput)
{
// TODO Auto-generated method stub
return null;
}
@Override
public AccelType getAccelType(FilterContext fctx)
{
// TODO Auto-generated method stub
return null;
}
@Override
public ImageData filter(FilterContext fctx, BaseTransform transform, Rectangle outputClip, Object renderHelper, com.sun.scenario.effect.Effect defaultInput)
{
// TODO Auto-generated method stub
return null;
}
};
}
@Override
void impl_update()
{
// TODO Auto-generated method stub
}
@Override
public BaseBounds impl_getBounds(BaseBounds bounds, BaseTransform tx, Node node, BoundsAccessor boundsAccessor)
{
// TODO Auto-generated method stub
return null;
}
@Override
boolean impl_checkChainContains(javafx.scene.effect.Effect e)
{
// TODO Auto-generated method stub
return false;
}
@Override
public javafx.scene.effect.Effect impl_copy()
{
// TODO Auto-generated method stub
return null;
}
}