我是碰撞检测新手,在游戏原型中遇到了一些问题。我已经做了好几天了。经过一些阅读和辅导,我仍然不明白我做错了什么,所以这里的其他人应该能够解释我做错了什么。
游戏运行时,屏幕上有10个绿色矩形(NPC)和1个红色矩形(吸血鬼)。作为一个起点,我希望吸血鬼“喝血”,当它通过愚蠢的运气随机穿过npc时。如果我不注释掉冲突检测方法,代码中就会出现一个nullpointexception。
公共类屏幕扩展JPanel实现可运行{
public Thread gameLoop = new Thread (this);
public static int myWidth, myHeight;
public static boolean isFirst = true;
public static Npc npc;
public static Vamp vamp;
public static Npc[] npcs = new Npc[10]; //in future will have npcs and vamp count increase/decreasable
public static Vamp[] vamps = new Vamp[1];
public Screen(Frame frame){
gameLoop.start();
}
public void define(){
npc = new Npc();
vamp = new Vamp();
for(int i=0;i<npcs.length;i++){
npcs[i] = new Npc();
}
for(int i=0;i<vamps.length;i++){
vamps[i] = new Vamp();
}
}
public void paintComponent(Graphics g){
if(isFirst){
myWidth = getWidth();
myHeight = getHeight();
define();
for(int i=0;i<npcs.length;i++){
spawnVillagers();
}
for(int i=0;i<vamps.length;i++){
spawnVamp();
}
isFirst = false;
}
g.setColor(new Color(192,192,192));
g.fillRect(0, 0, getWidth(), getHeight());
for(int i=0;i<npcs.length;i++){
if(npcs[i].inGame){
npcs[i].draw(g);
}
}
for(int i=0;i<vamps.length;i++){
if(vamps[i].inGame){
vamps[i].draw(g);
}
}
}
public void spawnVillagers(){
for(int i=0;i<npcs.length;i++){
if(!npcs[i].inGame){
npcs[i].spawn();
break;
}
}
}
public void spawnVamp(){
for(int i=0;i<vamps.length;i++){
if(!vamps[i].inGame){
vamps[i].spawn();
break;
}
}
}
public void checkCollision(){
for(int i=0;i<vamps.length;i++){
Vamp v = (Vamp) vamps[i];
Rectangle vampSpace = v.bounds(); //nullpoint error
for(int n=0;n<npcs.length;n++){
Npc c = (Npc) npcs[n];
Rectangle npcSpace = c.bounds(); //nullpoint error
if(vampSpace.intersects(npcSpace)){ //error here as well since it's not getting bounds
vamp.gainBlood();
}
}
}
}
@Override
public void run() {
while (true){
if(!isFirst) {
npc.physic();
vamp.physic();
for(int i=0;i<npcs.length;i++){
if(npcs[i].inGame){
npcs[i].physic();
}
}
for(int i=0;i<vamps.length;i++){
if(vamps[i].inGame){
vamps[i].physic();
}
}
}
checkCollision();
repaint();
try{
Thread.sleep(1);
} catch (Exception e){}
}
}
}
公共类Npc扩展矩形{
剪
public Rectangle bounds(){
return (new Rectangle (x, y, npcSize, npcSize));
}
剪
}
}
}
公共类鞋面{
剪
public Rectangle bounds(){
return (new Rectangle (x, y, npcSize, npcSize));
}
}
泰马特。我对nullpointerException错误做了一些额外的研究。用新的眼光审视我的代码,解决了我的问题。我在代码的早期将checkcollision()设置为。
我试图计算在一个Tibble中源向量和比较向量之间的Jaccard相似度。 jaccard_sim中的所有值都为零。但是,如果我们运行类似这样的东西,我们得到第一个条目的正确的Jaccard相似度为0.2:
我目前正在学习C#和XNA,我在让碰撞检测正常工作方面遇到了一些问题。当敌人物体相交时,我希望我的玩家消失。 下面显示了我在Obj类中的代码 我正在循环查看objList中的每个项目,看它们是否相交。在这种情况下,如果敌人与我的玩家相交,我希望玩家消失,但这并没有发生。 此代码来自我的Player类 如果它与敌人相交,它应该消失,但这似乎没有发生。
问题内容: 如何检测两个元素是否发生冲突? 这两个div是简单的彩色框,彼此垂直,因此没有复杂的形状或角度。 问题答案: 一般思路-获得框的偏移量和尺寸,并检查它们是否重叠。 如果要更新,可以使用: 另外,请注意,您可以针对特定示例优化功能。 因为它们是固定的,所以您不必重复读取框的尺寸(就像我在代码中一样)。您可以在页面加载时读取它们(将其读取到变量中),然后仅读取变量 小盒子的水平位置不会改变
我正在尝试为我的大学工作制作一个基于2D平台的游戏(在SFML)。我不是要求任何人为我编写一些代码,但如果有人能提供一些指示,我将非常感激:) 目前我有大约13门课,包括: BaseEntity(大多数游戏对象都是由此派生的) 玩家(继承自BE) 魔法宝石(玩家需要这些来通过关卡晋级) 平台 SolidBlock(从平台继承) 可以说,我已经构建了大部分的游戏“积木”--每个类都有自己的更新函数,
我只使用Box2D进行碰撞检测。我的代码与Ray Wenderlich教程中的代码类似。 我遇到了这个方法的问题。由于代码绕过了Box2D模拟,因此没有碰撞响应。因此,精灵可以重叠。我知道Box2D冲突API提供了一个单位法向量来帮助解决冲突。然而,这个矢量传达的是方向,而不是大小。因此,我无法确定应该将重叠的sprites移动多远。有人知道如何使用Box2D冲突API手动解决重叠问题吗?
我已经更新了dplyr(现在是0.7.1),我的很多旧代码都不能用了,因为mutate_each已经被弃用了。我曾经用mutate_each做类似这样的事情(代码如下),使用列索引。我会在数百个专栏中这样做。而我就是搞不清楚如何用mutate_at正确使用vars参数。我看到的所有例子都使用了列名...我不想这么做。我确信这是一个简单的答案,但是我已经花了太多的时间试图弄明白它,并且将非常感谢一些