- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作一个可以在游戏运行时变为半透明的游戏对象。
当我在进入游戏的计时器循环(在 loadImages() 方法内)之前将其应用于对象的图像时,我的半透明滤镜工作正常。但是,在游戏的计时器循环(timerLoop() 方法)内,它不起作用,并且使我的对象的图像完全透明。我做错了什么?
我正在使用 java.awt 库进行绘图,并使用 RGBImageFilter 来应用半透明。
public class MyMainJPanel extends JPanel
{
// essential members
private Timer timer;
private Camera camera;
// image data
Image bulletImg;
Image bulletSemiTransImg;
MenuBackgroundsSprite menuBg, menuBg2;
public MyMainJPanel()
{
this.setBackground(Color.black);
this.setFocusable(true);
// load images
this.loadImages();
// set up the timer
TimerListener timerListener = new TimerListener();
timer = new Timer(0,timerListener);
this.setFPS(60);
timer.start();
}
private boolean loadImages()
{
...
loads some other graphics
...
// LOAD BULLET GRAPHICS
// get our default toolkit
Toolkit tk = Toolkit.getDefaultToolkit();
// load our bullet images
Image preImg = tk.getImage("graphics/basicBullet.png");
bulletImg = ColorFilters.setTransparentColor(preImg, new Color(0xFF00FF)); // pink
// bulletSemiTransImg = ColorFilters.setSemiTransparency(bulletImg, 0.5); // My semitransparency works here outside the timer loop
...
loads Camera object
...
return true;
}
/**
* setFPS()
* Preconditions: fps is a quantity of frames per second
* Postconditions: Sets the timer's refresh rate so that it fires fps times per second.
**/
public void setFPS(int fps)
{
int mspf = (int) (1000.0 /fps + 0.5);
timer.setDelay(mspf);
}
// Event listener for the timer objects
private class TimerListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
if(source == timer)
{
// perform a loop through the game's logic
timerLoop(); // Enters timer loop step here
}
}
}
public void timerLoop()
{
// bullet dynamic semitransparency test
bulletSemiTransImg = ColorFilters.setSemiTransparency(bulletImg, 0.5); // This is where I'm having my problem. It makes all the bullets completely transparent
// if I try to apply semitransparency to them inside my timer loop.
// repaint after game logic has completed.
this.repaint();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2D = (Graphics2D) g;
// test data
// Camera transform
g2D.setTransform(camera.getTransform());
// Draw graphics
...
Draw some stuff before the bullets
...
// Here's where I draw my bullets
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 10; j++)
{
g2D.translate((i+1)*32,(j+1)*32);
g2D.drawImage(bulletSemiTransImg, null, null);
g2D.setTransform(camera.getTransform()); // reset the Graphics context's transform
}
}
}
}
/**
* ColorFilters.java
* A class of static methods used to apply color filters to images.
**/
public class ColorFilters
{
public static Image setTransparentColor(Image srcImg, final Color tColor) // method accepts a transparent color.
// It'll transform all pixels of the transparent color to transparent.
{
ImageFilter filter = new RGBImageFilter() // overriding part of the RGBImageFilterClass to produce a specialized filter.
{
public int testColor = tColor.getRGB() | 0xFF000000; // establish the transparent color as a hexidecimal value for bit-wise filtering.
public int filterRGB(int x, int y, int rgb) // overriden method
{
if((rgb | 0xFF000000 ) == testColor) // if transparent color matches the color being tested, make it transparent.
{
return rgb & 0x00FFFFFF; // alpha bits set to 0 yields transparency.
}
else // otherwise leave it alone.
return rgb;
}
};
ImageProducer ip = new FilteredImageSource(srcImg.getSource(),filter);
Image result = Toolkit.getDefaultToolkit().createImage(ip);
return result;
}
// Here is the static method used to apply the semitransparency
public static Image setSemiTransparency(Image srcImg, double semiTrans) // method accepts a transparent color.
// It'll transform all pixels of the transparent color to transparent.
{
if(semiTrans > 1.0)
semiTrans = 1.0;
if(semiTrans < 0.0)
semiTrans = 0.0;
final int alpha = (int) (255 * (1.0 - semiTrans));
ImageFilter filter = new RGBImageFilter() // overriding part of the RGBImageFilterClass to produce a specialized filter.
{
public int filterRGB(int x, int y, int rgb) // overriden method
{
System.out.println(alpha);
if((rgb & 0xFF000000) != 0)
return (rgb & 0x00FFFFFF) + (alpha << 24); // alpha bits set to 0 yields transparency.
else
return rgb;
}
};
ImageProducer ip = new FilteredImageSource(srcImg.getSource(),filter);
Image result = Toolkit.getDefaultToolkit().createImage(ip);
return result;
}
}
最佳答案
不久前我找到了解决问题的方法。我最终使用 MediaTracker 对象来等待更改后的图像在渲染之前加载。现在可以了。
这是使用 MediaTrackers 的简短教程:http://www.javacoffeebreak.com/articles/mediatracker/index.html
关于Java - 随着时间的推移改变图像的透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7732513/
我正在制作一个应用程序,我需要使用 ffmpeg 将两个视频文件叠加在另一个之上。 .我尝试了各种命令,但它所做的只是合并视频。 最佳答案 基本方法是 ffmpeg -i in1 -i in2 -fi
我将 Qt3D 与 offscreen renderer 结合使用并修改框架图以包含背景图像,例如 here . 不幸的是,使用 QPhongAlphaMaterial 为绘制在背景图像上的对象添加透
我正在开发的这个组件有视觉问题。它是带有 2 个 JTextField 和 2 个 JLabel 的 JPanel。我不能做坚实的背景。我尝试了几种不透明/背景颜色组合但没有成功。 我不允许附加图像,
我正在使用 Gnuplot 成功绘制一些时间序列数据。然而,该系列相当密集(大约 5 英寸空间中有 10,000 个样本),当我绘制多个系列时,很难看到绘制在顶部的系列下方。 有什么方法可以使线条具有
我正在尝试设置一个自定义拖动图标以在 NSTableView 中使用。一切似乎都正常,但由于我对 Quartz 缺乏经验,我遇到了问题。 - (NSImage *)dragImageForRowsWi
是否可以制作例如 20% 透明的 TMemo 或其他 vcl 组件?像 TButton 或 TEdit 吗? 在谷歌搜索解决方案时,我发现了这个: From Here ,然后我想,如果我在窗体上绘制图
我目前正在学习如何使用 Scenekit,并且遇到了透明对象的问题。我写了一个着色器来增加正面看脸时的透明度,当我选择白色背景时,一切都按预期工作...... transparency with wh
我对 openGL 中的 alpha 混合有疑问... 我尝试了一些绘制透明对象的方法...通过在绘制透明面之前禁用 GL_DEPTH_TEST 并在绘制透明面后再次重新启用 GL_DEPTH_TES
我正试图让我的背景 webView 像那样透明: webView.setBackgroundColor(0x00000000); 但它不起作用,如果我添加这一行,一切都是透明的(我看不到我的 html
我目前正在创建一个应用程序并且出现了这个问题,我想让 TabLayout 透明。当我使用 RelativeLayout TabLayout 覆盖内容时,当我使用 LinearLayout TabLay
我有一个 UINavigationItem(不是 UINavigationBar),我想使其透明或不透明。这是在我建立从导航 Controller 到我的 UIViewController 子类的关系
是否可以让您的 android Activity 以透明模式在当前正在运行的 Activity 之上运行,以便您可以通过它看到它下面的 Activity ?如果可能,您可以设置不同级别的透明度吗? 最
我正在使用 noUiSlider 范围 slider 。这是 jsfiddle: https://jsfiddle.net/oun5p1xz/ behaviourSlider = document.g
有没有办法改变控制台的不透明度使其半透明? 还有办法将控制台的背景颜色更改为自定义颜色吗? 最佳答案 快速谷歌显示 this site其中包含用于具有透明窗口的控制台应用程序的代码。 本质上,您必须获
主.xml: 这是我的 main.xml,我试图使按钮最透明,但我仍然想看到它们,但我不知道要添加什么以及在哪里添加,请用低不透明度更正我的 xml在按钮
如何将实际内容 Pane 的背景设置为不透明,我添加到其中的面板我已经设置为不透明,但即使我这样做,选项卡 Pane 的主要区域仍显示为蓝色 JTabbedPane tabbedPane = new
是否可以继承颜色但覆盖不透明度值?以下是伪 CSS 中的示例: .color-class { background-color: rgba(255, 0, 0, 0); } .lighten
我正在尝试让我的导航栏变得 100% 透明,以便 UINavigationButtonItems 只可见并且背景(通常为白色)应该显示背景图像。 我试过了 HomeNavigationControll
RGBA 非常有趣,-webkit-gradient、-moz-gradient 和呃... progid:DXImageTransform.Microsoft.gradient 也是如此...是的。
我一直在尝试使用 AppBarLayout,但找不到使它的背景透明的方法。 我的意思是: 这是我的 XML: 如您所见,我使用的是颜色 #8000
我是一名优秀的程序员,十分优秀!