Часть кода не работает одновременно друг с другом? - PullRequest
0 голосов
/ 25 июня 2019

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

Код предназначен для перемещения плеера спрайта, остановки движения за пределами экрана и столкновения со стеной спрайта. Две части, которые не работают друг с другом, это Screen Collision и Sprite Collision

Вот код:

//VARIABLES
PlayerSpeed = 4
ZombieSpeed = 2
WYCollision = 0
WXCollision = 0
PlayerH = 100
AllowS = 1

   //Allow Movement
AllowMovementW = 1
AllowMovementS = 1
AllowMovementD = 1
AllowMovementA = 1

//MAIN LOOP
do
    //SET SPRITE POSITION

    //Set Sprite Position
    SetSpritePosition (Player,PlayerXpos,PlayerYpos)
    SetSpritePosition (Wall,WallXpos,WallYpos)
    SetSpritePosition (Zombie,ZombieXpos,ZombieYpos)


    //Variables
    ZCollision = GetSpriteCollision (Player,Zombie)

    //CONTROLES
    KeyW = GetRawKeyState(87)
    KeyS = GetRawKeyState(83)
    KeyD = GetRawKeyState(68)
    KeyA = GetRawKeyState(65)

    //gosubs
    gosub MovePlayer
    gosub ScreenCollision
    gosub SpriteCollision


    Sync()
loop


MovePlayer:
//If both respective key and allow movement is true, it moves the sprite
//KeyW**************************************    
if KeyW = 1 AND AllowMovementW = 1
    PlayerYpos = PlayerYpos - PlayerSpeed
endif

//KeyS**************************************
if KeyS = 1 AND AllowMovementS = 1
    PlayerYpos = PlayerYpos + PlayerSpeed
endif

//KeyD**************************************
if KeyD = 1 AND AllowMovementD = 1
    PlayerXpos = PlayerXpos + PlayerSpeed
endif

//KeyA**************************************
if KeyA = 1 AND AllowMovementA = 1
    PlayerXpos = PlayerXpos - PlayerSpeed
endif

SetSpritePosition (Player,PlayerXpos,PlayerYpos)

return

ScreenCollision:
//KEY W
if PlayerYpos =< 2
    AllowMovementW = 0
    Else
        AllowMovementW = 1
endif
//KEY S
if PlayerYpos => 636
    AllowMovementS = 0
    Else
        AllowMovementS = 1
endif
//KEY D
if PlayerXpos => 910
    AllowMovementD = 0
    Else
        AllowMovementD = 1
endif
//KEY A
if PlayerXpos =< -12
    AllowMovementA = 0
    Else
        AllowMovementA = 1
endif

SetSpritePosition (Player,PlayerXpos,PlayerYpos)

return

SpriteCollision:
    //WALL
//Zone
if PlayerXpos => 384 AND PlayerXpos =<616
    WYCollision = 1
    Else
        WYCollision = 0
endif

if PlayerYpos => 224 AND PlayerYpos =<380
    WXCollision = 1
    Else
        WXCollision = 0
endif
//Keys
//KeyW
if PlayerYpos = 380 AND WYCollision = 1
    AllowMovementW = 0
    Else
        AllowMovementW = 1
endif

//KeyS
if PlayerYpos = 224 AND WYCollision = 1
    AllowMovementS = 0
    Else
        AllowMovementS = 1
endif

//KeyD
if PlayerXpos = 380 AND WXCollision = 1
    AllowMovementD = 0
    Else
        AllowMovementD = 1
endif

//KeyA
if PlayerXpos = 616 AND WXCollision = 1
    AllowMovementA = 0
    Else
        AllowMovementA = 1
endif

SetSpritePosition (1,PlayerXpos,PlayerYpos)

return

Странно, что всякий раз, когда я отключаю код, который его ломает, он, кажется, работает нормально. Так что в самом коде нет ничего неправильного, просто кажется, что они не работают вместе; Кажется, он недооценивает ИЛИ это. Язык кодирования - DarkBASIC, а IDE - AppGameKit Classic. Есть мысли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...