繁体   English   中英

Java颜色冲突检测

[英]Java colour collision detection

我正在制作一个2D平台游戏,该游戏将几个预制的“关卡”图像输入到列表中。 游戏永远不会结束,因此它会根据需要不断添加更多图像。

我遇到角色在图像之间移动的问题,因为当家伙到达一幅图像的末尾时,它会抛出:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
at sun.awt.image.ByteInterleavedRaster.getDataElements(ByteInterleavedRaster.java:318)
at java.awt.image.BufferedImage.getRGB(BufferedImage.java:918)
at GamePanel.fall(run.java:197)
at run.actionPerformed(run.java:41)
at javax.swing.Timer.fireActionPerformed(Timer.java:313)
at javax.swing.Timer$DoPostEvent.run(Timer.java:245)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

但是我的图片宽了1000 x 600像素,它说超出了1000413的范围。

这是带有错误的部分的代码:

public void getActImg(){
    int tmp=0;
    for(int i=0;i<inUse.size();i++){
        tmp+=inUse.get(i).getWidth();
        System.out.println(imgPix);
        if(tmp/imgPix>=0){//int divide by width of all the pictures to find current img
            actImg=inUse.get(i);
            System.out.println(i);
            break;
        }
    }
}
public void fall(){
    if(posY+foot>getHeight()){
        die();
    }
    System.out.println((totDist+posX)%imgPix+","+(posY+foot));
    if(actImg.getImg().getRGB((totDist+posX)%imgPix,posY+foot)==Color.WHITE.getRGB()){
        posY+=vy;
        vy+=g;
        onGround=false;
    }
    else{
        onGround=true;
        if(vy>3){
            posY-=vy;
        }
        vy=0;
    }
}

我在互联网上搜索了任何形式的帮助,但他们只谈论如何插入重力或使用盒形碰撞。 我有重力,但不了解框碰撞。 这就是为什么我使用颜色。 任何帮助将不胜感激

谢谢

图像就像2D阵列。 位置(1000,413)位于图像的外部,因为索引从0开始,一直上升到999。当在某个位置获得颜色时,请确保该位置小于图像的宽度或高度,且不小于或等于。

在public void fall()中:

int x = (totDist + posX) % imgPix; // NOTE: I am not sure what imgPix is or why you are modding the value by it.
int y = posY + foot;


if (x > 0 && x < actImg.getWidth() && y > 0 && y < actImg.getHeight()) {
    if (actImg.getImg().getRGB(x, y) == Color.WHITE.getRGB()) {
        posY += vy;
        vy += g;
        onGround = false;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM