小编Mat*_*wek的帖子

游戏开发,移动相机时奇怪的图像效果

我正在使用AndEngine开发Side Scroll 2D游戏

游戏图像

我正在使用他们的SVG扩展(我正在使用矢量图形)

但是我发现奇怪而丑陋的效果,同时移动我的播放器(相机正在追逐播放器,意味着相机正在改变它的位置)

我精灵的图像看起来完全不同,它们就像是模糊的,或者像那些图像会移动的效果(不改变它们的位置,只是抖动效果,真的很难解释并正确地调用这个效果)希望这个图像可以解释一下:

游戏图片2

它或多或少,它在游戏中看起来如何:

a)"FIRST"图像显示正方形,而玩家正在移动(CAMERA不是)图像看起来应该如此

b)"SECOND"相同的图像,但具有这种奇怪的效果"在相机移动期间看起来像图像移动/模糊[追逐玩家])

我的朋友告诉我,这可能是硬件问题:

"你注意到的模糊实际上是一个硬件问题.一些手机"平滑"屏幕上的内容,给应用程序带来更好的感觉.我不知道它是屏幕还是图形处理器,但它不会发生在我妻子的三星Captivate上.它发生在我的Atrix和Xoom上.由于屏幕尺寸很大,它在Xoom上真的很明显."

但似乎有办法阻止它,因为我已经测试了许多类似的游戏,相机正在追逐玩家,我无法注意到这种效果.

有没有办法在代码中关闭它?


我很遗憾以前的答案,遗憾的是,仍存在问题.

直到现在,我已经尝试过:

  • 在正在updateChaseEntity上执行的setCenter方法上转换(int)
  • 使用PNG图像测试游戏,而不是SVG扩展和矢量图形
  • 不同的TextureOptions
  • hardwareAcceleration

如果有人有不同的想法,可能会产生这种奇怪的效果,我会非常感谢你的帮助 - 谢谢.

java android andengine

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

Sqlite - 关于降级

最近我更新了我的安卓游戏,编辑sqlite数据库在我的表中添加新字段,更新后,我收到4个崩溃报告(其中3个来自同一设备,三星Galaxy S4)

android.database.sqlite.SQLiteException:无法将android.database.sqlite.SQLiteOpenHelper.onDowngrade(SQLiteOpenHelper.java:361)中的数据库从版本2降级为1,位于android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java: 255)在android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)

我真的无法理解可能是什么原因,甚至可能开始降级数据库,而实际上需要在我的上一个数据库中进行升级.

在更新期间,我显然将DATABASE_VERSION值从1增加到2

我没有凌驾于降级方法,我的onUpgrade看起来如下:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
    updateToVersion2(db, oldVersion, newVersion);
}

private void updateToVersion2(SQLiteDatabase db, int oldVersion, int newVersion)
{
    if (oldVersion <= 1)
    {
        ContentValues cv1 = new ContentValues();
        cv1.put(FIELD_WORLD_ID, 6);
        cv1.put(FIELD_MAX_UNLOCKED, 1);
        db.insert(TABLE_LEVELS, null, cv1);
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

java database sqlite android

6
推荐指数
1
解决办法
4407
查看次数

Selenium 上传文件:找不到文件 [docker]

我有以下使用硒上传图像的方法。

public static void uploadSampleImage(StaticSeleniumDriver driver)
{
    File file = new File(System.getProperty("user.dir") + "/resources/images/" + SAMPLE_DOCUMENT_FILE_NAME);
    Utils.Log("file exists: " + file.exists());

    String imagePath = file.getAbsolutePath();
    WebElement input = driver.findElement(By.name("file"));
    input.sendKeys(imagePath);
}
Run Code Online (Sandbox Code Playgroud)

这是提供文件路径(如 Guru99 教程中所述)以上传文件的标准方式。

  1. 在 Windows 上本地测试时它工作正常
  2. 在 docker 容器 (linux) 中运行时它不起作用,出现此错误:

org.openqa.selenium.InvalidArgumentException:无效参数:文件未找到:/usr/src/app/resources/images/image2.png(会话信息:chrome=72.0.3626.81)(驱动程序信息:chromedriver=2.46.628388(4a34a70826ea2ea2ea2705ac705) ),platform=Linux 4.9.125-linuxkit x86_64)(警告:服务器没有提供任何堆栈跟踪信息)

这很奇怪,因为我确定给定目录中存在文件(在我上面的方法中,我正在检查文件是否存在并且日志清楚地确认了这一点)

在此处输入图片说明

欢迎任何建议,谢谢

java selenium docker

6
推荐指数
1
解决办法
3465
查看次数

Azure 构建管道、docker compose - 设置环境变量

我有一个构建管道,它运行一个 docker 镜像,其中包含一些使用 maven 运行的 java 程序。

在此处输入图片说明

选定的管道步骤运行自动化测试正在启动 docker-compose,它在 docker 中启动我的 java 程序,如您所见,我还FEATURES_LIST使用一些测试值设置了系统环境值,现在在我的 java 程序中,我尝试像往常一样返回值对于环境变量:

System.getenv("FEATURES_LIST");
Run Code Online (Sandbox Code Playgroud)

但它从未找到它,如果另一方面,我在我的 docker compose 文件中指定了环境变量,它会找到它(在 docker compose 文件底部设置了一些不同的 env 变量,见下文)

version: '3.4'

services:

  # SELENIUM GRID
  selenium-hub:
    image: selenium/hub
    ports:
      - 4444:4444

  chrome:
    image: selenium/node-chrome-debug
    ports:
      - 5900:5900
    environment:
      - HUB_PORT_4444_TCP_ADDR=selenium-hub
      - HUB_PORT_4444_TCP_PORT=4444
    depends_on:
      - selenium-hub

  # AUTOMATION PROJECT
  image_name:
    image: imagepathhere:latest
    volumes:
      - ./:/usr/src/app/
    network_mode: "host"
    depends_on:
      - chrome
    environment:
      - TARGET_TEST_ENV=uat
Run Code Online (Sandbox Code Playgroud)

问题是,如果我可以在 azure 构建管道中指定环境变量,它真的会让我的生活更轻松,是不是我做错了什么?

java docker docker-compose azure-devops azure-pipelines

5
推荐指数
1
解决办法
4005
查看次数

从渲染器接收消息超时:10.000

运行我的场景时出现以下错误。

org.openqa.selenium.TimeoutException:超时:从渲染器接收消息超时:10.000

(会话信息:chrome=79.0.3945.79)构建信息:版本:'3.14.0',修订版:'aacccce0',时间:'2018-08-02T20:19:58.91Z'系统信息:主机:'fv-az598 ', ip: '10.1.0.4', os.name: 'Linux', os.arch: 'amd64', os.version: '4.15.0-1064-azure', java.version: '1.8.0_212' 驱动程序信息: org.openqa.selenium.remote.RemoteWebDriver 功能 {acceptInsecureCerts: false, browserName: chrome,browserVersion: 79.0.3945.79, chrome: { chromedriverVersion: 79.0.3945.36

正如您所看到的,使用粗体、突出显示的字体,我确实有 chrome 和 chrome 驱动程序的匹配版本。

我还向我的 ChromeOptions 传递了一些参数,这意味着超时方面的帮助:

        // options to prevent TIMEOUTS
        options.addArguments("start-maximized"); ///sf/answers/1839867291/
        options.addArguments("enable-automation"); ///sf/answers/3068808991/
        options.addArguments("--no-sandbox"); ///sf/answers/3550814291/
        options.addArguments("--disable-infobars"); ///sf/answers/3068808991/
        options.addArguments("--disable-dev-shm-usage"); ///sf/answers/3550814291/
        options.addArguments("--disable-browser-side-navigation"); ///sf/answers/3438620671/
        options.addArguments("--disable-gpu"); ///sf/ask/3637199051/
        options.addArguments("--disable-features=VizDisplayCompositor"); ///sf/ask/3876153781/
Run Code Online (Sandbox Code Playgroud)

编辑:在 DOCKER 容器中运行时会发生这种情况(使用 Chrome 浏览器的最新 docker 映像和 node-chrome-debug)

任何想法将不胜感激。

java selenium google-chrome selenium-chromedriver docker

5
推荐指数
1
解决办法
1万
查看次数

xpath - 选择类名称中包含文本的元素

我正在尝试找到一种方法来选择这个特定的网络元素:

\n\n
<snack-bar-container class="mat-snack-bar-container ng-tns-c43-25 ng-trigger ng-trigger-state snackbar-info mat-snack-bar-center ng-star-inserted" role="alert" style="transform: translateY(0%);"><!----><simple-snack-bar class="mat-simple-snackbar ng-tns-c44-26 ng-trigger ng-trigger-contentFade ng-star-inserted" style="">Asset successfully loaded! <!----><button class="mat-simple-snackbar-action ng-tns-c44-26 ng-star-inserted" style="">Close</button></simple-snack-bar></snack-bar-container>\n
Run Code Online (Sandbox Code Playgroud)\n\n

目前我正在通过文本选择:

\n\n
.//snack-bar-container//*[contains(text(),\'There are errors on the page:\')]\n
Run Code Online (Sandbox Code Playgroud)\n\n

但由于存在本地化(文本翻译),从长远来看,它是不可靠的,问题是,如何选择具有类属性的元素,该类属性在类名称中包含某些特定文本。

\n\n

正如你所看到的,我的网络元素类非常长,并且经常变化,所以我需要检查它是否包含一些特定的文本,我尝试过:

\n\n
.//[contains(@class,\xe2\x80\x99snackbar-info\xe2\x80\x99)]\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它不起作用,有什么建议吗?谢谢。

\n

testing selenium xpath selenium-webdriver

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

Azure 发布管道,在失败阶段后继续

我有以下 azure 发布管道:

在此处输入图片说明

问题是我有时需要离开左阶段才能失败,但同时,即使失败了,仍然应该执行右阶段,这可能吗?

我发现的唯一一件事是“即使选定的阶段部分成功也触发”,但如果前一阶段失败,则它不起作用。

在此处输入图片说明

azure azure-pipelines azure-pipelines-release-pipeline

3
推荐指数
1
解决办法
1764
查看次数

带有 RemoteWebDriver 的 WebStorage

我在运行测试时尝试访问 WebStorage,我使用 ChromeDriver 在本地运行测试,并使用 RemoteWebDriver 在管道中远程运行测试。

使用 RemoteWebDriver 时无法访问 WebStorage

WebStorage webStorage = (RemoteWebStorage) new Augmenter().augment(driver);
Run Code Online (Sandbox Code Playgroud)

我正进入(状态:

org.openqa.selenium.remote.RemoteWebDriver 无法转换为 org.openqa.selenium.remote.html5.RemoteWebStorage

欢迎任何建议,谢谢。

java selenium selenium-webdriver remotewebdriver

2
推荐指数
1
解决办法
1869
查看次数

平滑从A移动到B.

我有一个安卓游戏,我不时将相机(可见屏幕部分)从A点移动到B点.

显然我可以这样做:

camera.setCenter(B.getX(), B.getY();
Run Code Online (Sandbox Code Playgroud)

但它看起来不太好,它只是立即跳转,我想要实现的是从A到B的平滑移动.我可以访问onUpdate方法,它循环更新某些游戏对象(所以我可以在某些毫秒内执行某些事情)

我真的无法弄清楚如何创建这样的算法,以允许两点之间的平滑移动(分类我不知道如何计算我应该添加到哪个值

camera.setCenter(camera.getX() + xValue, camera.getY() + yValue)
Run Code Online (Sandbox Code Playgroud)

因为必须计算这些值取决于这两个点之间的距离.

java algorithm math android

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

从列表中获取活动对象

让我们说:

private List<Item> items = new ArrayList<Item>();
Run Code Online (Sandbox Code Playgroud)

Item我的自定义类在哪里,它可以有两个状态(布尔值)活动(true)或不活动(false)它有boolean isActive()返回当前状态.

现在我要做的是从列表中接收随机项,(from 0 to items.size() - 1)但它必须是活动的.

我想要做的是在从列表中获取随机项目后,检查它是否有效,如果没有,重复直到我们收到活动项目,如果它处于活动状态,则返回它以便我们可以使用它.

不确定它是否正确,谢谢.

java random

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

检查对象坐标是否符合要求

我正在制作游戏,我需要检查对象的坐标是否满足要求(目标坐标)和允许的+ - 差异.

例:

int x; //current object X coordinate
int y; //current object Y coordinate

int destinationX = 50; //example X destination  value
int destinationY = 0;  //example Y destination value
int permittedDiference = 5;

boolean xCorrect = false;
boolean yCorrect = false;
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建算法,检查

 if (x == destinationX + permittedDifference || x == destinationX - permittedDifference)
 {
     xCorrect = true;
 }

 if (y == destinationY + permittedDifference || y == destinationY - permittedDifference)
 {
     yCorrect = true;
 }
Run Code Online (Sandbox Code Playgroud)

听起来最简单的方式,但也许有更好的方式?将不胜感激一些提示.

java

0
推荐指数
1
解决办法
54
查看次数

Admob 横幅位置错误

我有一个用 JAVA 编写的 android 游戏,不知什么原因,Admob 横幅在我们的一小部分玩家设备上显示在错误的位置,我已经在 30 多台设备上进行了测试,但无法重现它,一些玩家向我们发送了证明尽管。

按照设计,我们的横幅应该始终显示在屏幕的右上角,但有时它会显示在左上角,任何想法将不胜感激。

这就是我初始化它的方式(我正在以编程方式做所有事情,没有 xml

    @Override
    protected void onSetContentView()
    {
        final RelativeLayout relativeLayout = new RelativeLayout(this);

        final FrameLayout.LayoutParams relativeLayoutLayoutParams = new FrameLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);

        this.mRenderSurfaceView = new RenderSurfaceView(this);
        this.mRenderSurfaceView.setRenderer(this.mEngine, this);

        final android.widget.RelativeLayout.LayoutParams surfaceViewLayoutParams = new RelativeLayout.LayoutParams(BaseGameActivity.createSurfaceViewLayoutParams());
        surfaceViewLayoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);

        relativeLayout.addView(this.mRenderSurfaceView, surfaceViewLayoutParams);

        FrameLayout frameLayout = new FrameLayout(this);

        FrameLayout.LayoutParams fparams=new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);

        adView = new AdView(this);

        final FrameLayout.LayoutParams adViewLayoutParams = new FrameLayout.LayoutParams(
                FrameLayout.LayoutParams.WRAP_CONTENT,
                FrameLayout.LayoutParams.WRAP_CONTENT,
                Gravity.END | Gravity.TOP);

        adView = new AdView(this);
        adView.setAdSize(com.google.android.gms.ads.AdSize.BANNER);
        adView.setAdUnitId("....");
        adView.setEnabled(false);
        adView.refreshDrawableState();
        adView.setVisibility(AdView.GONE);
        AdRequest adRequest …
Run Code Online (Sandbox Code Playgroud)

java android banner admob android-layout

0
推荐指数
1
解决办法
211
查看次数