- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个用“Tiled”创建的等距 .TMX 文件,我使用的是 AndEngine GLES1。我想将其用作背景或 map 。如果可能的话,我还希望将我的“玩家”运动与瓷砖联系起来。我知道有一些问题与此有关,但我需要实际代码来显示背景。
这是我唯一的java文件
package com.example.game;
import java.util.LinkedList;
import org.anddev.andengine.engine.Engine;
import org.anddev.andengine.engine.camera.Camera;
import org.anddev.andengine.engine.options.EngineOptions;
import org.anddev.andengine.engine.options.EngineOptions.ScreenOrientation;
import org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.anddev.andengine.entity.modifier.MoveModifier;
import org.anddev.andengine.entity.scene.Scene;
import org.anddev.andengine.entity.scene.Scene.IOnSceneTouchListener;
import org.anddev.andengine.entity.scene.background.ColorBackground;
import org.anddev.andengine.entity.sprite.Sprite;
import org.anddev.andengine.entity.util.FPSLogger;
import org.anddev.andengine.input.touch.TouchEvent;
import org.anddev.andengine.opengl.texture.TextureOptions;
import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
import org.anddev.andengine.opengl.texture.region.TextureRegion;
import org.anddev.andengine.ui.activity.BaseGameActivity;
import android.view.Display;
public class SimpleGame extends BaseGameActivity implements
IOnSceneTouchListener {
//Set up camera
private Camera mCamera;
//Set main scene
private Scene mMainScene;
//?? graphics variables?
private BitmapTextureAtlas mBitmapTextureAtlas;
private TextureRegion mPlayerTextureRegion;
//declaring sprite variable for player character
private Sprite player;
//Equiping ammunition
private LinkedList projectileLL;
private LinkedList projectilesToBeAdded;
private TextureRegion mProjectileTextureRegion;
@Override
public Engine onLoadEngine() {
//Preparing Engine giving it proper resolution (what you see on the screen)
final Display display = getWindowManager().getDefaultDisplay();
int cameraWidth = display.getWidth();
int cameraHeight = display.getHeight();
mCamera = new Camera(0, 0, cameraWidth, cameraHeight);
return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE,
new RatioResolutionPolicy(cameraWidth, cameraHeight), mCamera));
}
@Override
public void onLoadResources() {
mBitmapTextureAtlas = new BitmapTextureAtlas(512, 512,
TextureOptions.BILINEAR_PREMULTIPLYALPHA);
BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
// assinging the player.png image for the mPlayerTextureRegion
mPlayerTextureRegion = BitmapTextureAtlasTextureRegionFactory
.createFromAsset(this.mBitmapTextureAtlas, this, "player.png",
0, 0);
mEngine.getTextureManager().loadTexture(mBitmapTextureAtlas);
mProjectileTextureRegion = BitmapTextureAtlasTextureRegionFactory
.createFromAsset(this.mBitmapTextureAtlas, this,
"Projectile.png", 64, 0);
}
@Override
public Scene onLoadScene() {
//??? Creating the scene?
mEngine.registerUpdateHandler(new FPSLogger());
mMainScene = new Scene();
mMainScene
.setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f));
final int PlayerX = this.mPlayerTextureRegion.getWidth() / 2;
final int PlayerY = (int) ((mCamera.getHeight() - mPlayerTextureRegion
.getHeight()) / 2);
// Using sprite to illustrate player
player = new Sprite(PlayerX, PlayerY, mPlayerTextureRegion);
// Place player on game screen
mMainScene.attachChild(player);
projectileLL = new LinkedList();
projectilesToBeAdded = new LinkedList();
mMainScene.setOnSceneTouchListener(this);
return mMainScene;
}
// This method is used for shooting "bullets"
// Need to find a way to limit ammunition based on in game inventory
private void shootProjectile(final float pX, final float pY) {
int offX = (int) (pX - player.getX());
int offY = (int) (pY - player.getY());
if (offX <= 0)
return;
//Using projectile.png as sprite, what is .deepCopy???
final Sprite projectile;
projectile = new Sprite(player.getX(), player.getY(),
mProjectileTextureRegion.deepCopy());
mMainScene.attachChild(projectile, 1);
int realX = (int) (mCamera.getWidth() + projectile.getWidth() / 2.0f);
float ratio = (float) offY / (float) offX;
int realY = (int) ((realX * ratio) + projectile.getY());
int offRealX = (int) (realX - projectile.getX());
int offRealY = (int) (realY - projectile.getY());
float length = (float) Math.sqrt((offRealX * offRealX)
+ (offRealY * offRealY));
float velocity = 480.0f / 1.0f; // 480 pixels per 1 sec//
float realMoveDuration = length / velocity;
MoveModifier mod = new MoveModifier(realMoveDuration,
projectile.getX(), realX, projectile.getY(), realY);
projectile.registerEntityModifier(mod.deepCopy());
projectilesToBeAdded.add(projectile);
}
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
if (pSceneTouchEvent.getAction() == TouchEvent.ACTION_DOWN) {
final float touchX = pSceneTouchEvent.getX();
final float touchY = pSceneTouchEvent.getY();
shootProjectile(touchX, touchY);
return true;
}
return false;
}
@Override
public void onLoadComplete() {
}
}
编辑切换到 GLES2 后,这给了我一些错误。我正在使用一个新类并插入提供的代码。我需要为其中任何一个创建类吗?是否通过属性链接 TMXproject - android 和该页面底部的“添加”框?谢谢
package com.example.game;
import org.andengine.engine.camera.Camera;
import org.andengine.engine.options.EngineOptions;
import org.andengine.engine.options.ScreenOrientation;
import org.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.scene.background.Background;
import org.andengine.opengl.texture.TextureOptions;
import org.andengine.ui.activity.SimpleBaseGameActivity;
import org.andengine.util.debug.Debug;
public class StarterGame extends SimpleBaseGameActivity {
static final int CAMERA_WIDTH = 800;
static final int CAMERA_HEIGHT = 480;
private Object tiledMap;
@Override
public EngineOptions onCreateEngineOptions() {
//Create view for the scene??
Camera mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
return new EngineOptions(true, ScreenOrientation.LANDSCAPE_SENSOR,
new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), mCamera);
}
@Override
protected void onCreateResources() {
// TODO Auto-generated method stub
try {
final TMXLoader tmxLoader = new TMXLoader(context.getAssets(), textureManager, TextureOptions.NEAREST, vertexBufferObjectManager, new ITMXTilePropertiesListener() {
@Override
public void onTMXTileWithPropertiesCreated(final TMXTiledMap pTMXTiledMap, final TMXLayer pTMXLayer, final TMXTile pTMXTile, final TMXProperties<TMXTileProperty> pTMXTileProperties) {
// do stuff with tiles that have properties...
}
});
this.tiledMap = tmxLoader.loadFromAsset("tmx/bg.tmx");
this.tiledMap.setIsometricDrawMethod(TMXIsometricConstants.DRAW_METHOD_ISOMETRIC_CULLING_PADDING);
} catch (final TMXLoadException e) {
Debug.e(e);
}
}
@Override
protected Scene onCreateScene() {
//Setup scene with background color only
Scene scene = new Scene();
scene.setBackground(new Background(0.09804f, 0.6274f, 0));
return scene;
}
}
最佳答案
很遗憾,我只能向您展示我是如何使用 AndEngine GLES2 来实现的。不过,我不确定 GLES1 版本是否可以做到这一点。但也许你可以试着告诉我们你的经历。
首先从 Git 存储库下载 TMX Tilemap 扩展:https://github.com/nicolasgramlich/AndEngineTMXTiledMapExtension
其次将您的项目与 AndEngineTMXTiledMapExtension 项目链接起来(它需要标记为库)
当这两个项目链接在一起时,您实际上可以像这样使用扩展:
import org.andengine.extension.tmx.TMXLayer;
import org.andengine.extension.tmx.TMXLoader;
import org.andengine.extension.tmx.TMXLoader.ITMXTilePropertiesListener;
import org.andengine.extension.tmx.TMXProperties;
import org.andengine.extension.tmx.TMXTile;
import org.andengine.extension.tmx.TMXTileProperty;
import org.andengine.extension.tmx.TMXTiledMap;
import org.andengine.extension.tmx.util.constants.TMXIsometricConstants;
import org.andengine.extension.tmx.util.exception.TMXLoadException;
public class YourActivity extends SimpleBaseGameActivity {
private TMXTiledMap tiledMap;
private TMXLayer tmxLayer;
@Override
protected void onCreateResources() {
try {
final TMXLoader tmxLoader = new TMXLoader(getAssets(), getTextureManager(), TextureOptions.NEAREST, getVertexBufferObjectManager(), new ITMXTilePropertiesListener() {
@Override
public void onTMXTileWithPropertiesCreated(final TMXTiledMap tmxTiledMap, final TMXLayer tmxLayer, final TMXTile tmxTile, final TMXProperties<TMXTileProperty> tmxTileProperties) {
// do stuff with tiles that have properties...
}
});
this.tiledMap = tmxLoader.loadFromAsset("tmx/yourMap.tmx");
this.tiledMap.setIsometricDrawMethod(TMXIsometricConstants.DRAW_METHOD_ISOMETRIC_CULLING_PADDING);
} catch (final TMXLoadException e) {
Debug.e(e);
}
}
@Override
protected Scene onCreateScene() {
this.tmxLayer = this.tiledMap.getTMXLayers().get(0); // the 0 is just an index of the layer. It depends on how many layers you created within Tiled
attachChild(this.tmxLayer);
}
}
当您包含等轴测图时,您可能会看到一些像素瑕疵(黑线,图 block 聚集在一起的地方)——这是一个常见问题,在以下位置有一个修复程序: http://code.google.com/p/andenginetmxtiledmapartifactfixer/在这里你可以找到一个 java 程序,你可以用它加载你的 map 文件,它会生成一个你可以在你的项目中使用的固定 map 。在用法下查看您需要哪些参数。
希望这有帮助:)
克里斯多夫
关于dictionary - 在 AndEngine 中使用 TMX 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12084548/
我正在使用 andengine 开发游戏,我对加载屏幕感到震惊。每次按下我的菜单项时,加载下一个事件需要一些时间,同时出现黑屏,所以任何人都可以帮助我设置带有加载文本的屏幕而不是黑屏。 我搜索了一下,
您知道是否有任何教程或示例展示如何处理游戏的多个屏幕/场景? 例如,假设我有一个具有以下结构的游戏: 封面 主菜单 玩法 积分 将所有代码放在一个 java 文件中可能是一场噩梦......我想使用不
我是 AndEngine 的新手。从 a AndEngine Tutorial 工作时,未找到以下类。我尝试从 AndEngine 导入所有库,但仍未找到类。 类(class)是: SimpleLev
我对 andengine 非常陌生,尝试使用 git url 中的 andengine 示例:https://github.com/nicolasgramlich/AndEngineExamples
我希望在我的游戏中创建屏幕控件,但我不知道如何创建屏幕控件。 我的疑问是: 如何创建屏幕控件? 屏幕控件应该在我们的游戏项目中的什么位置实现? 屏幕控件的类型? 现在我正在创建这个游戏。我有一个球,但
所以,我正在研究 AndEnginePhysicsExample 代码。我想知道这个方法的含义是什么(http://pastebin.com/Day2hciB): private void addFa
我想从菜单开始游戏。在 Eclipse 中,我有 2 个项目,一个是菜单,另一个是实际的游戏。两者都使用 SimpleBaseGameActivity 作为基础。网上的例子做了如下所示的事情。特别是,
我创建这个池是为了回收和重用我添加到场景中的 Sprite 正如您将在我的代码中看到的,我创建了自己的获取方法,该方法随机化选择出现在场景中的 Sprite ,并随机化其 x 位置。问题是,它似乎出于
我的级别选择器出现问题。我正在使用我在该论坛的教程中找到的代码,但它无法正常工作。 事实是,当用户混合播放时,我正在使用两个场景,我将引擎设置为第二个场景,然后用户可以滚动级别。 然后,当用户按下后退
我有一个 GameScene,其中使用了 ZoomCamera、一个背景和一些“病毒”。问题是,当我放大或缩小背景时,背景也会缩放,我不希望这样,请帮忙。 http://puu.sh/9XPUl/c6
所以,这里的想法是收集三根日志,简单的任务。但我只能按特定顺序获取日志,否则触摸日志会使应用程序崩溃。为什么?如果我按顺序捕获它们,它就会起作用,但如果我先触摸日志 2 或 3,它就会崩溃。有更好的方
我正在学习如何使用 box2d 和 andEngine。我试图让我的 Sprite body 移动。我之前在 onCreateScene 中编写所有内容时就让它工作了,但现在我想为我的 Sprite
当用户在屏幕上交换手指时,我想显示一个三角形条。我不知道如何使用 AndEngine、使用粒子系统或使用 Sprite 或使用三角带算法... 我没有写任何代码,因为我很震惊该怎么做。我正在上传图片,
好吧,我正在提供这个变量来为 andengine 中的 sprite 表设置动画。 player.animate(new long[] { 100,100},0,2,false); 它采用的第一个
当在设备中加载时只有白色图像显示,当加载模拟器时图像被破坏 示例代码: // this.mCamera = new Camera(0, 0, 480,320); final Engine en
我开始在我的应用中使用 AndEngine。我使用了一个 xml 来定义应用程序的基本样式。我已经定义了一个场景,其中有一些可拖动的 Sprite 。 我已经正确导入了 xml,但场景出现在它上面,背
我试过这里的东西, http://www.andengine.org/forums/tutorials/getting-started-with-andengine-t11.html jar 文件 4
我仍在学习如何使用出色的 AndEngine 并进行了一些搜索,但我找不到如何创建像跳转到“超空间”这样的效果的示例。效果不必像在星球大战中看到的那样复杂,但可以像旧的 Windows“星星”屏幕保护
我使用的是Android 4.2.2。在我从 github 导入 andengine 并修复错误后,我制作了我的项目。之后我去了图书馆,添加了 andengine,一切都很好。 http://s29.
我在使用 ChangableText 时遇到问题,我正在使用它来显示当前分数。 但是它有问题,因为它在更新时速度很慢。但是,达到 90 分后,更新文本时不再有滞后......(只有前 9x10 分)
我是一名优秀的程序员,十分优秀!