Android Studio LibGDX 中的更新方法问题
Posted
技术标签:
【中文标题】Android Studio LibGDX 中的更新方法问题【英文标题】:Issues with update method in Android Studio LibGDX 【发布时间】:2016-06-09 17:04:58 【问题描述】:我正在尝试调用 update 方法,以便每次经过一定时间后,它都会破坏并添加一个新障碍,例如游戏循环。但是,当我这样做时,会出现一系列错误:
Error:(146, 8) Gradle: error: illegal start of expression
Error:(146, 16) Gradle: error: illegal start of expression
Error:(146, 32) Gradle: error: ';' expected
Error:(149, 23) Gradle: error: ';' expected
Error:(151, 31) Gradle: error: '.class' expected
Error:(151, 40) Gradle: error: illegal start of expression
Error:(151, 41) Gradle: error: ';' expected
这是似乎导致问题的代码:
public void update(float deltaTime)
Texture playerTexture = game.getManager().get("player.png");
Texture floorTexture = game.getManager().get("floor.png");
Texture overfloorTexture = game.getManager().get("overfloor.png");
Texture overfloor2Texture = game.getManager().get("overfloor2.png");
Texture obstacleTexture = game.getManager().get("obstacle.png");
Texture obstacle2Texture = game.getManager().get("obstacle2.png");
float timer = 0;
float spawnTime = 4f;
private void spawnEntity();
//Increment timer by the duration since the previous frame
float timer += Gdx.graphics.getRawDeltaTime();
//Compare to spawntime
if (timer >= float spawnTime)
//Spawn your object
floorList.add(new FloorEntity(world, floorTexture, overfloorTexture,overfloor2Texture, 0, 1000, 1));
floorList.add(new FloorEntity(world, floorTexture, overfloorTexture,overfloor2Texture ,8, 10 ,5));
floorList.add(new FloorEntity(world, floorTexture, overfloorTexture,overfloor2Texture ,10, 10 ,8));
floorList.add(new FloorEntity(world, floorTexture, overfloorTexture,overfloor2Texture ,34 , 3 ,5));
floorList.add(new FloorEntity(world, floorTexture, overfloorTexture,overfloor2Texture ,19 , 8 ,4));
floorList.add(new FloorEntity(world, floorTexture, overfloorTexture,overfloor2Texture ,24 , 8 ,1.5f));
floorList.add(new FloorEntity(world, floorTexture, overfloorTexture,overfloor2Texture ,27 , 5 , 2));
obstacleList.add(new ObstacleEntity(world, floorTexture, overfloorTexture, overfloor2Texture ,25, 10 ,20));
//But you will probably want to spawn something on the right, just outside of your screen view.
//This is the right side of your vp in the world. Depending how you draw you can add some more to it.
float spawnX = camera.position.x + camera.viewportWidth / 2;
//Then use this to spawn your object, since you hardcoded stuff I have no idea where to put it.
//Now reset timer
timer-= spawnTime;
//And perhaps randomize the spawnTime? (between 2 and 4 seconds)
Random random;
spawnTime = random.nextFloat() * 2 + 2;
这是我的GameScreen
课程的代码:
package com.circlecrashavoider;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Contact;
import com.badlogic.gdx.physics.box2d.ContactImpulse;
import com.badlogic.gdx.physics.box2d.ContactListener;
import com.badlogic.gdx.physics.box2d.Manifold;
import com.badlogic.gdx.physics.box2d.World;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.utils.viewport.FitViewport;
import com.circlecrashavoider.entities.FloorEntity;
import com.circlecrashavoider.entities.ObstacleEntity;
import com.circlecrashavoider.entities.ObstacleEntity2;
import com.circlecrashavoider.entities.PlayerEntity;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Random;
/**
* Created by Felipe on 2/22/2016.
*/
public class GameScreen extends BaseScreen
private Stage stage;
private World world;
private PlayerEntity player;
private List<FloorEntity> floorList = new ArrayList<FloorEntity>();
private List<ObstacleEntity> obstacleList = new ArrayList<ObstacleEntity>();
private List<ObstacleEntity2> obstacle2List = new ArrayList<ObstacleEntity2>();
public GameScreen(MainGame game)
super(game);
stage = new Stage(new FitViewport(1024, 620));
world = new World(new Vector2(0, -10), true);
world.setContactListener(new ContactListener()
private boolean areCollided(Contact contact, Object userA, Object userB)
return (contact.getFixtureA().getUserData().equals(userA) && contact.getFixtureB().getUserData().equals(userB)) ||
(contact.getFixtureA().getUserData().equals(userB) && contact.getFixtureB().getUserData().equals(userA));
@Override
public void beginContact(Contact contact)
if (areCollided(contact, "player", "floor"))
player.setJumping(false);
if (Gdx.input.isTouched())
player.setMustJump(true);
if (areCollided(contact, "player", "obstacle"))
player.setAlive(false);
System.out.println("GAME OVER");
if (areCollided(contact, "player", "obstacle2"))
player.setAlive(false);
System.out.println("GAME OVER");
@Override
public void endContact(Contact contact)
@Override
public void preSolve(Contact contact, Manifold oldManifold)
@Override
public void postSolve(Contact contact, ContactImpulse impulse)
);
@Override
public void show()
Texture playerTexture = game.getManager().get("player.png");
Texture floorTexture = game.getManager().get("floor.png");
Texture overfloorTexture = game.getManager().get("overfloor.png");
Texture overfloor2Texture = game.getManager().get("overfloor2.png");
Texture obstacleTexture = game.getManager().get("obstacle.png");
Texture obstacle2Texture = game.getManager().get("obstacle2.png");
player = new PlayerEntity(world, playerTexture, new Vector2(1, 2));
for (FloorEntity floor : floorList)
stage.addActor(floor);
for (ObstacleEntity obstacle : obstacleList)
stage.addActor(obstacle);
stage.addActor(player);
for (ObstacleEntity2 obstacle2 : obstacle2List)
stage.addActor(obstacle2);
public void update(float deltaTime)
Texture playerTexture = game.getManager().get("player.png");
Texture floorTexture = game.getManager().get("floor.png");
Texture overfloorTexture = game.getManager().get("overfloor.png");
Texture overfloor2Texture = game.getManager().get("overfloor2.png");
Texture obstacleTexture = game.getManager().get("obstacle.png");
Texture obstacle2Texture = game.getManager().get("obstacle2.png");
float timer = 0;
float spawnTime = 4f;
private void spawnEntity();
//Increment timer by the duration since the previous frame
float timer += Gdx.graphics.getRawDeltaTime();
//Compare to spawntime
if (timer >= float spawnTime)
//Spawn your object
floorList.add(new FloorEntity(world, floorTexture, overfloorTexture,overfloor2Texture, 0, 1000, 1));
floorList.add(new FloorEntity(world, floorTexture, overfloorTexture,overfloor2Texture ,8, 10 ,5));
floorList.add(new FloorEntity(world, floorTexture, overfloorTexture,overfloor2Texture ,10, 10 ,8));
floorList.add(new FloorEntity(world, floorTexture, overfloorTexture,overfloor2Texture ,34 , 3 ,5));
floorList.add(new FloorEntity(world, floorTexture, overfloorTexture,overfloor2Texture ,19 , 8 ,4));
floorList.add(new FloorEntity(world, floorTexture, overfloorTexture,overfloor2Texture ,24 , 8 ,1.5f));
floorList.add(new FloorEntity(world, floorTexture, overfloorTexture,overfloor2Texture ,27 , 5 , 2));
obstacleList.add(new ObstacleEntity(world, floorTexture, overfloorTexture, overfloor2Texture ,25, 10 ,20));
//But you will probably want to spawn something on the right, just outside of your screen view.
//This is the right side of your vp in the world. Depending how you draw you can add some more to it.
float spawnX = camera.position.x + camera.viewportWidth / 2;
//Then use this to spawn your object, since you hardcoded stuff I have no idea where to put it.
//Now reset timer
timer-= spawnTime;
//And perhaps randomize the spawnTime? (between 2 and 4 seconds)
Random random;
spawnTime = random.nextFloat() * 2 + 2;
@Override
public void render(float delta)
Gdx.gl20.glClearColor(0.5f, 0.6f, 1, 3f);
Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act();
world.step(delta, 6 ,2);
stage.draw();
@Override
public void dispose()
stage.dispose();
world.dispose();
【问题讨论】:
你能发布你的 gradle 我认为有一些问题导致错误。 【参考方案1】:看看这段代码:
float timer += Gdx.graphics.getRawDeltaTime();
//Compare to spawntime
if (timer >= float spawnTime)
//Spawn your object
您缺少围绕 float 单词的括号 - 您正在尝试使用 (float) (强制转换运算符),但您执行此操作的方式会导致异常。
应该是
if (timer >= (float)spawnTime)
或者说
if (timer >= spawnTime)
因为 spawnTime 已经是 float 类型了
【讨论】:
我应该创建一个 SpawnEntity 类吗?程序总是报错以上是关于Android Studio LibGDX 中的更新方法问题的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Android Studio (libGDX) 中运行项目
如何在Android Studio中调试“桌面”libgdx应用程序
LibGDX - 无法从 Android Studio 运行 destop 版本