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

我正在使用他们的SVG扩展(我正在使用矢量图形)
但是我发现奇怪而丑陋的效果,同时移动我的播放器(相机正在追逐播放器,意味着相机正在改变它的位置)
我精灵的图像看起来完全不同,它们就像是模糊的,或者像那些图像会移动的效果(不改变它们的位置,只是抖动效果,真的很难解释并正确地调用这个效果)希望这个图像可以解释一下:

它或多或少,它在游戏中看起来如何:
a)"FIRST"图像显示正方形,而玩家正在移动(CAMERA不是)图像看起来应该如此
b)"SECOND"相同的图像,但具有这种奇怪的效果"在相机移动期间看起来像图像移动/模糊[追逐玩家])
我的朋友告诉我,这可能是硬件问题:
"你注意到的模糊实际上是一个硬件问题.一些手机"平滑"屏幕上的内容,给应用程序带来更好的感觉.我不知道它是屏幕还是图形处理器,但它不会发生在我妻子的三星Captivate上.它发生在我的Atrix和Xoom上.由于屏幕尺寸很大,它在Xoom上真的很明显."
但似乎有办法阻止它,因为我已经测试了许多类似的游戏,相机正在追逐玩家,我无法注意到这种效果.
有没有办法在代码中关闭它?
我很遗憾以前的答案,遗憾的是,仍存在问题.
直到现在,我已经尝试过:
如果有人有不同的想法,可能会产生这种奇怪的效果,我会非常感谢你的帮助 - 谢谢.
最近我更新了我的安卓游戏,编辑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)
谢谢.
我有以下使用硒上传图像的方法。
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 教程中所述)以上传文件的标准方式。
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)(警告:服务器没有提供任何堆栈跟踪信息)
这很奇怪,因为我确定给定目录中存在文件(在我上面的方法中,我正在检查文件是否存在并且日志清楚地确认了这一点)
欢迎任何建议,谢谢
我有一个构建管道,它运行一个 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 构建管道中指定环境变量,它真的会让我的生活更轻松,是不是我做错了什么?
运行我的场景时出现以下错误。
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)
任何想法将不胜感激。
我正在尝试找到一种方法来选择这个特定的网络元素:
\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>\nRun Code Online (Sandbox Code Playgroud)\n\n目前我正在通过文本选择:
\n\n.//snack-bar-container//*[contains(text(),\'There are errors on the page:\')]\nRun Code Online (Sandbox Code Playgroud)\n\n但由于存在本地化(文本翻译),从长远来看,它是不可靠的,问题是,如何选择具有类属性的元素,该类属性在类名称中包含某些特定文本。
\n\n正如你所看到的,我的网络元素类非常长,并且经常变化,所以我需要检查它是否包含一些特定的文本,我尝试过:
\n\n.//[contains(@class,\xe2\x80\x99snackbar-info\xe2\x80\x99)]\nRun Code Online (Sandbox Code Playgroud)\n\n但它不起作用,有什么建议吗?谢谢。
\n我有以下 azure 发布管道:
问题是我有时需要离开左阶段才能失败,但同时,即使失败了,仍然应该执行右阶段,这可能吗?
我发现的唯一一件事是“即使选定的阶段部分成功也触发”,但如果前一阶段失败,则它不起作用。
我在运行测试时尝试访问 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
欢迎任何建议,谢谢。
我有一个安卓游戏,我不时将相机(可见屏幕部分)从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)
因为必须计算这些值取决于这两个点之间的距离.
让我们说:
private List<Item> items = new ArrayList<Item>();
Run Code Online (Sandbox Code Playgroud)
Item我的自定义类在哪里,它可以有两个状态(布尔值)活动(true)或不活动(false)它有boolean isActive()返回当前状态.
现在我要做的是从列表中接收随机项,(from 0 to items.size() - 1)但它必须是活动的.
我想要做的是在从列表中获取随机项目后,检查它是否有效,如果没有,重复直到我们收到活动项目,如果它处于活动状态,则返回它以便我们可以使用它.
不确定它是否正确,谢谢.
我正在制作游戏,我需要检查对象的坐标是否满足要求(目标坐标)和允许的+ - 差异.
例:
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 编写的 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)