- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以早些时候,当我测试我的游戏时,一切都很顺利,然后我添加了一些代码。在我的游戏中,我有 PlayState 或 MenuState 等状态,现在一切顺利,但是当我尝试在游戏中切换状态时,会出现以下错误:
Exception in thread "LWJGL Application" java.lang.NullPointerException
at com.badlogic.gdx.graphics.g2d.SpriteBatch.flush(SpriteBatch.java:955)
at com.badlogic.gdx.graphics.g2d.SpriteBatch.end(SpriteBatch.java:176)
at com.platformer.Entities.Player.draw(Player.java:191)
at com.platformer.gamestates.PlayState.draw(PlayState.java:102)
at com.platformer.managers.GameStateManager.draw(GameStateManager.java:44)
at com.platformer.game.Game.render(Game.java:55)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:214)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120)
它说问题出在我的 Player 类中,所以这里是代码:
package com.platformer.Entities;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import static com.platformer.managers.B2DVars.PPM;
import com.badlogic.gdx.graphics.g2d.TextureAtlas.AtlasRegion;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;
import com.badlogic.gdx.physics.box2d.FixtureDef;
import com.badlogic.gdx.physics.box2d.PolygonShape;
import com.badlogic.gdx.physics.box2d.World;
import com.platformer.game.Game;
import com.platformer.managers.Animation;
import com.platformer.managers.B2DVars;
import com.platformer.managers.GameContacts;
import java.util.Random;
/**
* Created by Oliverss on 23/04/2015.
*/
public class Player extends Entities{
public static boolean DebugOn=false;
public boolean shouldPlay=false;
public boolean shouldMenu=false;
public static final int LEFT = 0;
public static final int RIGHT = 1;
public int direction=1;
float BPF=255f;
int canJump=0;
float weaponY;
public static int shade=100;
public static int coatColor;
Controller controller;
Weapons weapon;
Random random=new Random();
float[][] skinShades={
{210/BPF,180/BPF,140/BPF}, //tan
{139/BPF,69/BPF,19/BPF}, //saddle-brown
{160/BPF,82/BPF,45/BPF}, //sienna
{255/BPF,235/BPF,205/BPF}, //blanched almond
{255/BPF,228/BPF,196/BPF}, //bisque
};
float[][] coatColors={
{64/BPF,64/BPF,64/BPF}, //dark-gray
{102/BPF,102/BPF,0/BPF}, //dark-green
{47/BPF,79/BPF,79/BPF}, //dark-slate-gray
{165/BPF,42/BPF,42/BPF}, //brown
};
public Player(World world,float x,float y){
this.x=x;
this.y=y;
speed=1.5f;
if(shade==100){
shade=random.nextInt(skinShades.length);
coatColor=random.nextInt(coatColors.length);
System.out.println("*Generating*");
System.out.println("shade "+shade);
System.out.println("coat "+coatColor);
}
controller=new Controller();
weapon=new Weapons("pistol");
AtlasRegion region=Game.atlas.findRegion("playerskin");
TextureRegion[] sprites=region.split(32,32)[0];
skinAnimation=new Animation(sprites,1/12f);
region=Game.atlas.findRegion("playercoat");
sprites=region.split(32,32)[0];
coatAnimation=new Animation(sprites,1/12f);
region=Game.atlas.findRegion("playerskinjump");
sprites=region.split(32,32)[0];
skinJumpAnimation=new Animation(sprites,1/12f);
region=Game.atlas.findRegion("playercoatjump");
sprites=region.split(32,32)[0];
coatJumpAnimation=new Animation(sprites,1/12f);
skin=new Sprite();
skin.setSize(32/PPM,32/PPM);
coat=new Sprite();
coat.setSize(32/PPM,32/PPM);
bdef=new BodyDef();
bdef.position.set(x/PPM,y/PPM);
bdef.type=BodyType.DynamicBody;
body=world.createBody(bdef);
PolygonShape shape=new PolygonShape();
shape.setAsBox(9/PPM,15/PPM);
fdef=new FixtureDef();
fdef.shape=shape;
fdef.filter.categoryBits=B2DVars.BIT_PLAYER;
fdef.filter.maskBits=B2DVars.BIT_BLOCK|B2DVars.BIT_HOUSE;
body.createFixture(fdef).setUserData("player");
//create sensor
shape.setAsBox(7/PPM,6/PPM,new Vector2(0,-16/PPM),0);
fdef.shape=shape;
fdef.filter.categoryBits=B2DVars.BIT_PLAYER;
fdef.filter.maskBits=B2DVars.BIT_BLOCK;
fdef.isSensor=true;
body.createFixture(fdef).setUserData("player_sensor");
}
public void update(float dt,GameContacts gameContacts){
handleInput(dt,gameContacts);
skin.setPosition(body.getPosition().x-(16/PPM),body.getPosition().y-(17/PPM));
coat.setPosition(body.getPosition().x-(16/PPM),body.getPosition().y-(17/PPM));
switch (movementState){
case 0:{
coatAnimation.setCurrentFrame(0);
skinAnimation.setCurrentFrame(0);
coatJumpAnimation.setCurrentFrame(0);
skinJumpAnimation.setCurrentFrame(0);
coat.setRegion(coatAnimation.getFrame());
skin.setRegion(skinAnimation.getFrame());
break;
}
case 1:{
coatAnimation.update(dt);
skinAnimation.update(dt);
coat.setRegion(coatAnimation.getFrame());
skin.setRegion(skinAnimation.getFrame());
break;
}
case 2:{
coatAnimation.update(dt);
skinAnimation.update(dt);
coat.setRegion(coatAnimation.getFrame());
skin.setRegion(skinAnimation.getFrame());
break;
}
case 3:{
coatAnimation.setCurrentFrame(0);
skinAnimation.setCurrentFrame(0);
coat.setRegion(coatJumpAnimation.getFrame());
skin.setRegion(skinJumpAnimation.getFrame());
break;
}
}
y=coat.getY();
x=coat.getX();
weaponY=y;
if(!gameContacts.isPlayerOnGround()){
coatJumpAnimation.setCurrentFrame(1);
skinJumpAnimation.setCurrentFrame(1);
coat.setRegion(coatJumpAnimation.getFrame());
skin.setRegion(skinJumpAnimation.getFrame());
weaponY+=4/PPM;
}
weapon.update(x,weaponY,direction,coatAnimation.getCurrentFrame());
}
public void draw(SpriteBatch batch){
if(direction==LEFT)flip();
batch.begin();
skin.draw(batch);
coat.draw(batch);
batch.end();
weapon.draw(batch);
controller.debug(DebugOn);
controller.draw();
}
public void flip(){
skin.flip(true,false);
coat.flip(true,false);
}
public void handleInput(float dt,GameContacts gameContacts){
//movement
if(controller.leftDown||Gdx.input.isKeyPressed(Input.Keys.LEFT))movementState=1;
if(controller.rightDown||Gdx.input.isKeyPressed(Input.Keys.RIGHT))movementState=2;
if(!controller.leftDown&&!controller.rightDown&&!Gdx.input.isKeyPressed(Input.Keys.LEFT)&&!Gdx.input.isKeyPressed(Input.Keys.RIGHT))movementState=0;
Vector2 vec=body.getLinearVelocity();
force=0;
switch (movementState){
case 1:if(vec.x>-speed)force=-50;direction=LEFT;break;
case 2:if(vec.x<speed)force=50;direction=RIGHT;break;
case 0:force=vec.x*-10;break;
}
body.applyForceToCenter(new Vector2(force,0),true);
if((controller.jumpDown||Gdx.input.isKeyPressed(Input.Keys.UP))&&gameContacts.isPlayerOnGround()&&canJump>50){
body.applyForceToCenter(0,300,true);
canJump=0;
}
if(canJump>51)canJump=51;
canJump++;
if(canJump<52)movementState=3;
if(controller.attackdown&&gameContacts.isOnHouse()){
shouldPlay=true;
}
if(Gdx.input.isKeyJustPressed(Input.Keys.C)){
shade=random.nextInt(skinShades.length);
coatColor=random.nextInt(coatColors.length);
System.out.println("shade "+shade);
System.out.println("coat "+coatColor);
}
skin.setColor(skinShades[shade][0],skinShades[shade][1],skinShades[shade][2],1);
coat.setColor(coatColors[coatColor][0],coatColors[coatColor][1],coatColors[coatColor][2],1);
//debug
if(controller.attackdown&&(Gdx.input.isKeyJustPressed(Input.Keys.VOLUME_DOWN)||Gdx.input.isKeyJustPressed(Input.Keys.VOLUME_UP)||Gdx.input.isKeyJustPressed(Input.Keys.CONTROL_LEFT))){if(DebugOn){DebugOn=false;System.out.println("off");}else{DebugOn=true;System.out.println("on");}}
//debug
if(controller.jumpDown&&(Gdx.input.isKeyJustPressed(Input.Keys.VOLUME_DOWN)||Gdx.input.isKeyJustPressed(Input.Keys.VOLUME_UP)||Gdx.input.isKeyJustPressed(Input.Keys.CONTROL_LEFT))){shouldMenu=true;}
}
@Override
public void dispose(){
skin.getTexture().dispose();
coat.getTexture().dispose();
weapon.dispose();
}
public float getx(){return x;}
public float gety(){return y;}
}
这里有什么问题吗?
最佳答案
您确定skin
和coat
在绘制时应用了纹理吗?
您的错误消息表明问题出在此处:
batch.begin();
skin.draw(batch);
coat.draw(batch);
batch.end();
我唯一能想到的就是状态是否困惑并且他们没有纹理可绘制。
关于java - LibGDX SpriteBatch渲染错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30376552/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!