小编Zip*_*ppy的帖子

覆盖onDraw()或draw()?

我的项目基于surfaceView,直到现在我已经在onDraw中完成了所有渲染,而我已经覆盖了.一切似乎都没问题.

但是,我刚刚更新了我的SDK,现在它给了我一个错误告诉我:

可疑方法电话; 应该叫"画"而不是"onDraw"

有人可以解释这两者之间的区别吗?

我已经在网上阅读了一些类似的问题,但我没有找到我理解的解释.

谢谢

android draw surfaceview ondraw

21
推荐指数
3
解决办法
2万
查看次数

Android:使用平板电脑模拟其他设备?

我正在考虑投资Google Nexus 10作为我测试我的应用程序的首选平板​​电脑 - 我只是想知道是否有可能模仿其他设备的屏幕分辨率?由于nexus 10具有如此高的分辨率和DPI,我希望能够在其上运行我的应用程序,例如800 x 480屏幕等...

如果可能的话,我想这样做,因为它比使用模拟器更快,并且支持多点触控.这看起来很简单,但实际上可能吗?

android resolution emulation dpi tablet

18
推荐指数
2
解决办法
3419
查看次数

Android - 欧盟Cookie法

即将推出的Google政策更改,迫使我们实施一个对话框,通知欧盟用户有关广告和分析的Cookie /设备标识符使用情况.我想只向欧盟用户展示此对话框.我不想使用其他权限(例如android.permission.ACCESS_COARSE_LOCATION).因此我创建了一个测试欧盟用户的功能:

Android的

boolean showCookieHint()
{
    final SharedPreferences settings = getSharedPreferences("localPreferences", Context.MODE_PRIVATE);
    if (settings.getBoolean("termsAccepted", true)  == false) return false;

    List<String> list = new ArrayList<String>();
    list.add("AT"); //Austria
    list.add("BE"); //Belgium
    list.add("BG"); //Bulgaria
    list.add("HR"); //Croatia
    list.add("CY"); //Cyprus
    list.add("CZ"); //Czech Republic
    list.add("DK"); //Denmark
    list.add("EE"); //Estonia
    list.add("FI"); //Finland
    list.add("FR"); //France
    list.add("GF"); //French Guiana
    list.add("PF"); //French Polynesia
    list.add("TF"); //French Southern Territories
    list.add("DE"); //Germany
    list.add("GR"); //Greece
    list.add("HU"); //Hungary
    list.add("IE"); //Ireland
    list.add("IT"); //Italy
    list.add("LV"); //Latvia
    list.add("LT"); //Lithuania
    list.add("LU"); //Luxembourg
    list.add("MT"); //Malta
    list.add("NL"); //Netherlands
    list.add("PL"); //Poland
    list.add("PT"); …
Run Code Online (Sandbox Code Playgroud)

cookies policy android adsense admob

17
推荐指数
1
解决办法
1380
查看次数

如何处理2个几乎相同的构造函数

如果我的自定义类中有2个构造函数,并且其中一个构造函数需要一个额外的参数并完成第一个构造函数,但只需要一行代码(并且这个额外的行使用额外的参数),如何在没有它的情况下处理这个问题.必须复制第一个构造函数中的所有代码?

示例代码

public myConstuctor(int number, int number2){

    int result = (number + number2);
    int result2 = (number2 - number1)

    //Etc
    //Etc
    //Etc
    //Etc

}

public myConstructor(int number1, int number2, int number 3){

    int result = (number + number2);
    int result2 = (number2 - number1)

    //Etc
    //Etc
    //Etc
    //Etc

    int result3 = (result + result2 + number3)


}
Run Code Online (Sandbox Code Playgroud)

java constructor overloading duplicates

16
推荐指数
3
解决办法
2218
查看次数

Java:访问资源和Demeter法则

概观

在我的(Android)Java游戏中,我有一个名为resources的类.顾名思义,这个班级掌握了游戏的资源.我在这里创建了所有的OpenGL对象(Sprite)

它看起来像下面的内容(显然,这是一个简化的版本,与真实项目中出现的版本相比):

public class Resources {

    Hero hero;
    Enemy enemy;
    MenuButtons mainMenuButtons;
    Background background;
    Scene mainMenu;

    public void createObjects(){

        hero = new Hero();
        enemy = new Enemy();
        mainMenuButtons = new MenuButtons();
        background = new Background();
        mainMenu = new Scene(this);

    }
}
Run Code Online (Sandbox Code Playgroud)

所以,在我的mainMenu场景中,我需要访问我的对象,所以我们可能会看到这样的东西:

public class mainMenu implements Scene {

    Resources resources;

    public mainMenu(Resources resources){

        this.resources = resources;

    }

    @Override
    public void render(){

        resources.background.draw();
        resources.hero.draw();
        resources.enemy.draw();
        mainMenuButtons.draw();           

    }

    @Override
    public void updateLogic(){

        resources.hero.move();
        resources.enemy.move();
        resources.mainMenubuttons.animate();
    }

} …
Run Code Online (Sandbox Code Playgroud)

java resources android accessor law-of-demeter

16
推荐指数
1
解决办法
494
查看次数

Android:了解OnDrawFrame,FPS和VSync(OpenGL ES 2.0)

一段时间以来,我经历了一段间歇性的"口吃",即在我的Android游戏中运行的精灵.这是一款非常简单的2D OpenGL ES 2.0游戏.(这是一个持续存在的问题,我多次重访过).

在我的游戏循环中,我有2个'定时器' - 一个用于记录前一秒的帧数,另一个用于计算从当前onDrawFrame迭代结束到下一个开始的时间(以毫秒为单位).

这就是我发现的:

当不渲染任何东西时,我得到60fps(大部分),并且每次调用onDrawFrame时,它报告自己需要更长的16.667ms.现在,如果我渲染一些东西(无论是1个四边形还是100个四边形,结果是相同的),我得到60fps(大部分)但是现在,只有大约20%的onDrawFrame调用报告自己需要更长的时间比上次通话时的16.667毫秒.

我真的不明白为什么会发生这种情况,首先,为什么当onDrawFrame没有做任何事情时,它被称为"慢慢" - 更重要的是,为什么任何GL调用(一个简单的四边形),仍然需要时间onDrawFrame调用超过16.667ms(尽管频率低得多).

我应该说当onDrawFrame报告从最后一次迭代开始超过16.667ms时,它几乎总是伴随着FPS下降(到58或59),但并非所有时间,有时候,FPS保持不变.相反,有时当FPS下降时,onDrawFrame在最后一次迭代完成的16.667ms内被调用.

所以......

我正在尝试修复我的游戏循环并根除这些"口吃" - 其他一些注意事项:

  • 当我进行方法分析时,它会显示glSwapBuffers,有时需要很长时间
  • 当我执行GL跟踪时,大多数场景表示在不到1毫秒内渲染,但有时奇数帧需要3.5-4毫秒 - 相同的场景.除了花费的时间之外没有什么变化
  • 几乎每次丢帧时,或onDrawFrame报告长时间延迟(或两者都有),都会出现视觉故障,但不是每次都有.大视觉故障似乎与多个'延迟'onDrawFrame调用和/或丢帧一致.
  • 我不认为这是一个场景复杂性问题有两个原因:1)即使我渲染我的场景两次,它也不会让问题变得更糟,我仍然在大多数情况下,偶尔会掉落60FPS,只是和以前一样,2),即使我把场景剥光,我仍然会遇到问题.

我显然是在误解某些东西,所以我们将不胜感激.

OnDrawFrame

@Override
public void onDrawFrame(GL10 gl) {

    startTime = System.nanoTime();        
    fps++;                        
    totalTime = System.nanoTime() - timeSinceLastCalled;    

    if (totalTime > 16667000) {     
        Log.v("Logging","Time between onDrawFrame calls: " + (totalTime /(double)1000000));
    }

    //Grab time
    newTime = System.currentTimeMillis() * 0.001;
    frameTime = newTime - currentTime; //Time the last frame took

    if (frameTime > 0.25)
        frameTime = 0.25;

    currentTime = …
Run Code Online (Sandbox Code Playgroud)

performance android game-loop opengl-es-2.0

12
推荐指数
1
解决办法
3200
查看次数

使用BufferedReader读取行并检查文件结尾

如果我的代码中有这样的东西:

String line = r.readLine();  //Where r is a bufferedReader
Run Code Online (Sandbox Code Playgroud)

如果下一行是文件的结尾,我该如何避免崩溃?(即null)

我需要阅读下一行,因为可能有一些我需要处理的东西,但如果没有代码只是崩溃.

如果有什么东西那么一切都没问题,但我无法保证那里会有东西.

所以,如果我做了类似的事情:(伪代码):

if (r.readLine is null)
//End code

else {check line again and excecute code depending on what the next line is}
Run Code Online (Sandbox Code Playgroud)

我遇到类似这样的问题是,当我检查该行反对null时,它已经移动到下一行,所以我该如何再次检查它?

我没有找到办法做到这一点 - 任何建议都会有很大的帮助.

java file-io readline bufferedreader

11
推荐指数
3
解决办法
6万
查看次数

Android:有没有办法加快canvas.drawBitmap的速度?

简单的问题,不确定是否有一个简单的答案!!

我能做些什么来加速我的surfaceview绘图?

我正在使用这样的东西:

c.drawBitmap(scaledSprite, X, Y, redPaint);
Run Code Online (Sandbox Code Playgroud)

我正在使用的方法必须在屏幕上绘制大约25个这些精灵,所以我使用for循环,这意味着它必须在一帧中显示25.

现在,这在我测试过的3款手机上运行得非常好,但在平板电脑上,它只是放慢速度.我已经评论了所有其他的绘图方法,只留下了这一个,这绝对是减缓游戏速度的原因.

是否有任何聪明的提示可以让我加快速度?

我知道开放GL是一种可能性,但现在大部分游戏都已编写好,所以如果我能帮助的话,我现在并不想做任何重大改变.

performance android frame-rate sprite tablet

8
推荐指数
1
解决办法
5055
查看次数

你可以在谷歌播放的阿尔法和beta测试期间使用admob吗?

简单的问题 - 您可以在Google Play的Alpha和Beta测试期间使用实时AdMob广告(即不在测试模式下)吗?

android admob google-play

8
推荐指数
1
解决办法
2682
查看次数

Google Play开发者控制台在Stacktrace中显示类和方法名称

我有一个启用了Proguard的应用程序(minifyenabled true),最近在Google Play开发者控制台中收到了崩溃报告.当我看着它时,我看到了以下内容:

在此输入图像描述

当Proguard启用时,我很惊讶地看到第1行中的完整类和方法名称.我以前总是看到这样的事情:

在com.myname.myapp.cf(未知来源)

我也很好奇线号是如何出现的,因为我没有在我的Proguard配置文件中保留行号(因此,为什么我通常在我的堆栈跟踪中看到'未知来源').

我反编译我的.apk,偷看了classes.dex文件,看起来一切都很好.我找到了堆栈跟踪的第1行中引用的类,并且类名确实是模糊的,方法名称也是如此.

现在,'MyActivity'(stacktrace的第2行)是我的应用程序的启动Activity,因此在Manifest中声明,所以我理解为什么它的名称没有被混淆,'onConnected'方法不是我的(它来自谷歌Play游戏服务),所以,再次,这是好的.

"MyMethodName"从所谓的 onConnected像这样:

@Override
public void onConnected(Bundle arg0) {
    myClassObject.myMethodName();       //Where myClassObject is an instance of MyClassName
}
Run Code Online (Sandbox Code Playgroud)

在我的build.gradle文件中将Debug设置为disabled.

我没有将mapping.txt文件上传到Play控制台,我手动运行回扫以查看我的去混淆堆栈跟踪.

如果有人能帮助我理解为什么我在这里看到我的全班和方法名,我会很感激?我可以/应该做些什么来防止这种情况发生?

android proguard deobfuscation google-play android-proguard

8
推荐指数
1
解决办法
368
查看次数