- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试弄清楚如何解决我的问题。我读过 http://groups.google.com/group/android-developers/browse_thread/thread/a2aac88a08cb56c2/b7dff4ba388cd664?lnk=gst&q=SurfaceView#b7dff4ba388cd664哪种回答了我的问题,但据我所知,这是一种“倒霉”的回答。所以这是我的问题:
我以正常方式使用 SurfaceView (lock/unlockAndPost) 在表面发生变化(例如方向等)时绘制我的游戏背景的位图,并且我正在渲染一系列移动的圆圈(最多 30 个半径约为 25.f)。这些圆圈位置的 x,y 数据来自服务器,并且一切正常。所有圆形对象都存储在一个列表中,它们的位置会更新,注意确保此更新是同步的。然而,当我将这些圆圈绘制到屏幕上时(在 canvas.lock() 期间),大多数时候它们渲染得很好但偶尔(例如每隔几秒一次)一些圆圈似乎会撕裂或短暂闪烁一帧。圈子的数量总是恒定的,所以这不是问题,并且没有对圈子列表的并发修改(正如我所说,它是同步的)。我什至尝试在每个渲染循环中将所有这些圆圈绘制到位图,并将该位图绘制到主 Canvas 。这似乎对性能的影响更大(~13FPS 而不是直接在主 Canvas 上绘制圆圈时的~30FPS)。对不起,如果信息有点模糊,伙计们,(试图让公司开心 :p )但我只是想知道是否有人可以给我一个线索?或者我只是运气不好。我应该注意,来自服务器的定位数据是实时数据,渲染反射(reflect)这些实时位置至关重要。
感谢您的帮助!克里斯
编辑:
很公平。这是来自渲染线程的 run()。
@Override
public void run() {
Canvas c;
while (mRun) {
c = null;
try {
c = mSurfaceHolder.lockCanvas(null);
synchronized (mSurfaceHolder) {
panel.onDraw(c);
}
} finally {
if (c != null) {
mSurfaceHolder.unlockCanvasAndPost(c);
}
}
}
}
非常标准的东西(几乎是月球着陆器的副本:p)
@Override
public void surfaceCreated(SurfaceHolder holder) {
mBackground= Bitmap.createBitmap(this.getWidth(), this.getHeight(), Bitmap.Config.RGB_565);
screenOrientation = getResources().getConfiguration().orientation;
if(thread.getState()== Thread.State.TERMINATED){
thread = new RenderThread(holder, this);
thread.setRunning(true);
thread.start();
}else {
thread.setRunning(true);
thread.start();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Canvas c = new Canvas(mField);
c.drawARGB(255,0,144,0);
backgroundDetails.renderOnPanel(c, this);
screenOrientation = getResources().getConfiguration().orientation;
}
非常容易理解,如果方向改变并启动渲染线程,只需重新绘制背景位图即可。
public void onDraw(Canvas canvas) {
canvas.drawBitmap(mField,0,0,null);
drawPositionBeans(canvas, this);
}
最后:
public void onDraw(Canvas canvas, RadarView radarView) {
float beanX=0, beanY=0;
float radius = 25.0f;
final List<PositionBean> copyOfList = Collections.synchronizedList(positionBeans.getPositionBeans());
synchronized(copyOfList){
try {
for (final PositionBean pb : copyOfList)
{
if (panel.getOrientation() == Configuration.ORIENTATION_PORTRAIT) {
beanX = (float)pb.getY()*(-1);
beanY = (float)pb.getX();
} else {
beanX = (float)pb.getY()*(-1);
beanY = (float)pb.getX()*(-1);
}
mPaint.setARGB(255,pb.getRgbColor().getR(), pb.getRgbColor().getG(), pb.getRgbColor().getB());
panel.drawSpot(canvas, beanX, beanY, radius, mPaint);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setARGB(255,255,222,1);
for (int j = 0; j < selectedBean.size(); ++j)
{
if(pb.getTrack()==selectedBean.get(j)) {
panel.drawSpot(canvas, beanX, beanY, radius+1, mPaint);
}
}
mPaint.setStyle(Paint.Style.FILL);
}
} catch(Exception e) {
Log.e("render", "Exception Drawing Beans: " + e);
}
}
}
再次感谢大家。克里斯
最佳答案
我有那个问题。适合我的解决方案是 onDraw 方法和更新变换矩阵的方法同步。因为当矩阵相同时存在帧(新矩阵()的初始值)并且在下一帧中它具有正确的值。
关于android - SurfaceView 闪烁/撕裂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3573004/
我是 Jetpack Compose 的新手。我目前正在开发一个聊天应用程序。我要求用户从图库中选择图像或从相机中拍照。然后我将文件 Uri 保存到数据库中,然后收听所有消息的列表。更新此列表时,此图
强制性代码,但 jsFiddle 准确地演示了这个问题。我有一个在 3 秒内扩大和淡出的圆圈。声纳风格是我的意图。问题是动画完成后它会快速“闪烁”然后重新开始。 请在此处查看问题:http://jsf
您好,我有一个多种颜色的 Logo ,我想将其用于随机/不稳定的故意闪烁效果。我只能找到其他关于使用淡入/淡出功能进行闪烁技巧的文章。关于如何用 css3 和/或 jQuery 做这样的技巧有什么想法
我正在使用 Swing 创建组件并使用 GLCanvas (com.jogamp.opengl.awt.GLCanvas) 创建我的窗口。 接下来就是问题了 在初始状态下,一切正常,但是当我拖动窗口调
我将 PhoneGap 2.2.0 与 jQuery Mobile 1.2.0 结合用于我在 Android 平台(版本 2.3.3 及更高版本)上的应用程序。在我使用固定标题的页面上,根本没有转换。
在我们使用 JavaScript 向页面添加图像或文本后,我们的网页在 iPad 上闪烁。我们尝试了 -webkit-backface-visibility:hidden; 的各种组合; -webki
有人能告诉我为什么在这个使用 SwingWorker 的简单演示中,屏幕闪烁,好像按钮不断跳跃一样? (关于改进多线程部分的反馈也值得赞赏)。 import java.awt.EventQueue;
我正在运行时从 CSV 文件向字符串网格添加多行,但是 StringGrid 在更新时似乎会闪烁很多,我认为会有一个 beginupadate/Endupdate 命令来停止此操作。但是我找不到它。有
我的窗口中有一个文本元素,我希望它每隔几秒或几毫秒闪烁一次或出现并消失。 我的代码是: import QtQuick 2.6 import QtQuick.Window 2.2 Window {
我的窗口中有一个文本元素,我希望它每隔几秒或几毫秒闪烁一次或出现并消失。 我的代码是: import QtQuick 2.6 import QtQuick.Window 2.2 Window {
我在UIButtons中有3个UIView,它们具有相同的文本颜色和相同的背景颜色。轻按三个按钮即可触发相应的事件。但是只有其中之一会响应触摸而“闪烁”。其他两个会发生什么?它们有时(但很少)具有“闪
我在 iOS 8 下实现 UIRefreshControl 时遇到了一种闪烁。每次我第一次到达 tableView 的顶部时(即应用程序刚刚启动时),我都会看到下面的 gif 中显示的闪烁。这不会发生
我希望有人能帮助我。我遇到以下问题: http://jsfiddle.net/zhPAF/ 标记: About Us
当鼠标悬停在图像“A”上时,尝试让图像“B”覆盖在图像“A”上。理想情况下,我希望它淡入。 HTML: jQuery:
我有一个 TabControl,我可以在其中添加/删除多个 TabPage。 当我添加足够多的页面以至于必须显示导航按钮时,我遇到了闪烁问题。 当导航按钮(左右导航的 2 个箭头)未显示时,我根本没有
我尝试实现自定义双缓冲,但它会导致闪烁。 这是控件(继承自Control的自定义控件)构造函数中的代码: bufferContext = new BufferedGraphicsContext();
我有以下代码: var footer = $('.footer'), extra = 0; // footer.css({ opacity: '0', display: 'block' });
我遇到了与 JPanel 中闪烁相关的问题。不知道为什么, window 里的球时不时地闪烁。我尝试了几种方法,比如双缓冲、BufferStrategy、Canvas,但都不起作用。主要思想是使用线程
我试图在 OpenGL 中绘制一些文本,而程序绘制立方体或任何 Opengl native ,因此,当我尝试将文本放在屏幕上时,它闪烁得非常快,我不知道为什么,我试图改变 sleep 值什么都没有..
我已经使用 LibGDX UI Setup 启动了一个项目。 我在 implements ApplicationListener 中唯一拥有的是: public void create() {
我是一名优秀的程序员,十分优秀!