이동 객체의 총수입 원 반송을하는 방법이 있나요?

클런 뮤어 :

기본적으로 난 그냥 이동 객체 떨어져 원 반송을하는 방법에 대한 몇 가지 지침을합니다. 임 문제가 발생하고 3 시간 동안 노력 해왔다 따라서 지원 포럼에 돌았 다. 나는 문 '이'복수를 시도했지만 분명히 내가 없음으로 제대로 이해하고 있지 않다가 노력하고 있습니다. 감사합니다 :)

나는 문 다른 경우에 이것을 알아 내기 위해 3 시간 동안 노력 해왔다.

float x;
float easing = 1;
float circle_x = 1;
float circle_y = 30;
float rad = 12.5;
float gravity = 0.98;
float move_x = 5;
float move_y = 5;

void setup() {
    size(640, 480);
    frameRate(60);
}

void draw() {
    background(#87CEEB);

    fill(#7cfc00);
    rect(0, 430, 640, 80);

    float targetX = mouseX;
    float dx = targetX - x;
    x += dx * easing;

    fill(#000000);
    rect(x, 400, 30, 30);
    rect(x-20, 390, 70, 10);
    rect(x, 430, 5, 20);
    rect(x+25, 430, 5, 20);


    ellipse(circle_x, circle_y, 25, 25);
    circle_x = circle_x + move_x;
    circle_y = circle_y + move_y;

    if (circle_x > width) {
        circle_x = width;
        move_x = -move_x;
    }

    if (circle_y > height) {
        circle_y = height;
        move_y = -move_y;
    }

    if (circle_x < 0) {
        circle_x = 0;
        move_x = -move_x;
    }

    if (circle_y < 0) {
        circle_y = 0;
        move_y= -move_y;
    }
}

볼이 내 마우스 커서 (안 개체), glitchy 원과 stuttery 이미지에 의해 반송되는 : 문장 만 다시받는 경우에 어떤 변수를 삽입.

Rabbid76 :

는 x 공 좌표 경우 객체의 범위이다 (체크하는 objW물체의 폭) :

circle_x > x && circle_x < x + objW

는 Y 공 좌표 경우와 도달 물체의 레벨 ( objH오브젝트 레벨이며, circleR볼의 반경)

circle_y > objH - circleR

또한 먼저 히트 테스트를하고 개체가 후에 땅을 반송하는 경우 테스트를 수행하는 것이 중요하다. 좋은 스타일은이 작업을 수행하는 것입니다 else if문 :

int objX1 = -20;
int objX2 = 70;
int objH = 390;
int circleR = 25/2;
if (circle_x > x + objX1  && circle_x < x + objX2 && circle_y > objH - circleR ) {
    circle_y = objH-circleR;
    move_y = -move_y; 
}
else if (circle_y > height) {
    circle_y = height;
    move_y = -move_y;
}
else if (circle_y < 0) {
    circle_y = 0;
    move_y= -move_y;
}  

또한 내가 먼저 공의 위치를 ​​계산하고 IST 현재 위치에 공을 그릴 것을 권장합니다 :

float x;
float easing = 1;
float circle_x = 1;
float circle_y = 30;
float rad = 12.5;
float gravity = 0.98;
float move_x = 5;
float move_y = 5;

void setup() {
    size(640, 480);
    frameRate(60);
}

void draw() {
    background(#87CEEB);

    fill(#7cfc00);
    rect(0, 430, 640, 80);

    float targetX = mouseX;
    float dx = targetX - x;
    x += dx * easing;

    circle_x = circle_x + move_x;
    circle_y = circle_y + move_y;
    if (circle_x > width) {
        circle_x = width;
        move_x = -move_x;
    }
    else if (circle_x < 0) {
        circle_x = 0;
        move_x = -move_x;
    }

    int objW = 70;
    int objH = 390;
    int circleR = 25/2;
    if (circle_x > x && circle_x < x + objW && circle_y > objH-circleR ) {
        circle_y = objH-circleR;
        move_y = -move_y; 
    }
    else if (circle_y > height) {
        circle_y = height;
        move_y = -move_y;
    }
    else if (circle_y < 0) {
        circle_y = 0;
        move_y= -move_y;
    }

    fill(#000000);
    rect(x, 400, 30, 30);
    rect(x-20, 390, 70, 10);
    rect(x, 430, 5, 20);
    rect(x+25, 430, 5, 20);

    ellipse(circle_x, circle_y, 25, 25);
}

추천

출처http://43.154.161.224:23101/article/api/json?id=210610&siteId=1