libGDX中调用Actor方法时触发Null Pointer Exception问题
根据你描述的情况——只有调用Actor的isPulsado()或setPosition()时才抛出空指针异常,我整理了几个最可能的排查方向,你可以一步步来:
先确认你的Actor实例是否真的被初始化了
空指针最常见的原因就是你调用方法的那个Actor对象本身是null。比如你可能只声明了Actor miActor;,但没执行miActor = new MiActor();,或者初始化代码放在了某个不会被执行的分支里(比如if判断里条件不满足)。你可以在调用这两个方法前加个非空判断,或者在初始化的地方打个日志确认一下对象是否被正确创建。检查
isPulsado()方法内部的实现
如果isPulsado()是你自己写的自定义方法,那很可能是方法里引用了某个未初始化的变量。比如方法里可能写了return boton.isPressed();,但boton这个对象没被实例化,就会抛出NPE。你可以把这个方法的代码贴出来,或者自己逐行检查里面的变量是否都被正确赋值了。排查
setPosition()是否被重写过
如果你的Actor子类重写了setPosition()方法,那要检查重写的代码里有没有使用未初始化的成员变量。比如你可能在重写的方法里调用了某个还没创建的辅助对象,导致调用时出错。如果没重写,那大概率还是Actor实例本身为null的问题。
另外,你给出的render方法里用到了lienzo、shaper1这些渲染对象,不过这些和Actor的空指针问题关联不大,重点还是聚焦在Actor实例本身和它的方法内部变量上。
内容的提问来源于stack exchange,提问作者Alvaro Luque Jimenez

