Я всегда работаю над кодом постепенно. Я никогда не перехожу из одной части кода в другую, если не проверяю, работает ли часть кода, в которой я сейчас работаю, как ожидалось. Поэтому я был немного шокирован, когда узнал, что предыдущая часть не работает после ввода нового бита кода
Код предназначен для перемещения плеера спрайта, остановки движения за пределами экрана и столкновения со стеной спрайта. Две части, которые не работают друг с другом, это 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. Есть мысли?