我总是一点一点地处理代码。除非确保当前正在使用的部分代码Im能够正常工作,否则我绝不会从代码的一部分移至另一部分。因此,我感到震惊的是发现引入新的代码位后,上一部分不起作用
该代码用于移动Sprite播放器,停止屏幕外移动并与Sprite墙碰撞。屏幕碰撞和精灵碰撞这两个不起作用的部分
此处提供代码:
//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。有什么想法吗?