«Огонь» возвращается в (X 0) после того, как попадает в правый край. - PullRequest
1 голос
/ 27 мая 2020

Я кодирую игру, в которой вы паук и пытаетесь избежать огня. Я кодирую огонь, и когда он попадает в правый край, он возвращается к левому краю и движется вверх и вниз до бесконечности. Я использую код из школьного бесплатного программного обеспечения в качестве основы с некоторой модификацией «анимация прыгающего мяча» .

test1.xdest и test1.ydest не вызываются нигде, кроме sub bounce и в основном do loop. Не знаю, зачем он это делает.

SCREEN _NEWIMAGE(640, 480, 32)
RANDOMIZE TIMER
TYPE test 'player info
    x AS INTEGER
    y AS INTEGER
END TYPE

TYPE test1 'fire info
    x AS INTEGER
    y AS INTEGER
    xdest AS INTEGER
    ydest AS INTEGER
    number AS INTEGER
    fire AS LONG
END TYPE

DIM SHARED spider AS test
DIM SHARED test1 AS test1
test1.x = 0 'fire x chord
test1.y = 0 'fire y chord

test1.xdest = 1 '1 if fire is moving right 0 left
test1.ydest = 0 '1 up 0 down
test1.fire = _LOADIMAGE("./fire.png")

DO
    PCOPY 1, _DISPLAY
    CLS
    IF _KEYDOWN(18432) THEN spider.y = spider.y - 5
    IF _KEYDOWN(20480) THEN spider.y = spider.y + 5

    IF _KEYDOWN(19200) THEN spider.x = spider.x - 5
    IF _KEYDOWN(19712) THEN spider.x = spider.x + 5
    CIRCLE (spider.x, spider.y), 5, _RGB(177, 83, 127)
    _PUTIMAGE (test1.x, test1.y), test1.fire
    IF test1.xdest = 1 THEN test1.x = test1.x + 5
    IF test1.xdest = 0 THEN test1.x = text1.x - 5

    IF test1.ydest = 1 THEN test1.y = test1.y - 5
    IF test1.ydest = 0 THEN test1.y = test1.y + 5

    bounce
    border

    WAIT &H3DA, &H3DA
    WAIT &H3DA, &H3DA, 8
    _DISPLAY
    PCOPY _DISPLAY, 1
LOOP

SUB bounce 'makes the fire bounce
    IF test1.x >= 628 THEN
        test1.xdest = 0
    END IF
    IF test1.x <= 0 THEN
        text1.xdest = 1
    END IF
    IF test1.y >= 468 THEN
        test1.ydest = 1
    END IF
    IF test1.y <= 0 THEN
        test1.ydest = 0
    END IF
END SUB
SUB border 'prevents palyer from going OOB
    IF spider.x > 630 THEN spider.x = spider.x - 5
    IF spider.x < 0 THEN spider.x = spider.x + 5
    IF spider.y > 470 THEN spider.y = spider.y - 5
    IF spider.y < 0 THEN spider.y = spider.y + 5
END SUB

Ответы [ 2 ]

0 голосов
/ 24 августа 2020

Проблема в этой программе в том, что пара опечаток .

  • В строке 37 вы ошибочно написали te x t1 .x . Должно быть te s t1.x
  • В строке 56 вы ошибочно написали te x t1.xdest . Должно быть te s t1.xdest

Вы можете сделать код более эффективным, если будете использовать ELSE IF:

IF test1.x >= 628 THEN
    test1.xdest = 0
ELSE IF test1.x <= 0 THEN
    test1.xdest = 1
END IF
IF test1.y >= 468 THEN
    test1.ydest = 1
ELSE IF test1.y <= 0 THEN
    test1.ydest = 0
END IF
0 голосов
/ 02 июня 2020

Я понял это, в строке 37 я неправильно написал одну из своих переменных, я поставил text1.x вместо test1.x

...