简体   繁体   English

Java颜色冲突检测

[英]Java colour collision detection

I am making a 2d platformer game that takes in several premade images of "levels" and randomly inserts them into a list. 我正在制作一个2D平台游戏,该游戏将几个预制的“关卡”图像输入到列表中。 The game never ends so it just keeps adding more images as needed. 游戏永远不会结束,因此它会根据需要不断添加更多图像。

I am having a problem with the character moving between the images because when the guy reaches the end of one image, it throws: 我遇到角色在图像之间移动的问题,因为当家伙到达一幅图像的末尾时,它会抛出:

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)

But my picture is 1000 by 600 pixels wide and it says it goes out of range at 1000,413. 但是我的图片宽了1000 x 600像素,它说超出了1000413的范围。

This is the code for the section with the error: 这是带有错误的部分的代码:

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;
    }
}

I have searched the internet for any form of help but they only talk about how to insert gravity or use box collision. 我在互联网上搜索了任何形式的帮助,但他们只谈论如何插入重力或使用盒形碰撞。 I have the gravity but do not understand box collision. 我有重力,但不了解框碰撞。 That is why I am using colour. 这就是为什么我使用颜色。 Any help would be greatly appreciated 任何帮助将不胜感激

Thank you 谢谢

Images are just like 2D arrays. 图像就像2D阵列。 The position (1000,413) IS outside the image, since indices start at 0 and go up to 999. When getting a color at a position, make sure the position is less than the width or height of the image, not less than or equal. 位置(1000,413)位于图像的外部,因为索引从0开始,一直上升到999。当在某个位置获得颜色时,请确保该位置小于图像的宽度或高度,且不小于或等于。

In public void fall(): 在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