Мне нужен цикл, который будет добавлять число (или вычитать число) каждый раз, когда происходит столкновение
Я делаю это для школы. Я добавляю в уже существующую программу.
То, что я пытаюсь сделать, это увеличивать количество топлива в топливной табличке каждый раз, когда топливный контейнер сталкивается с моим ракетным кораблем. Я создал команду checkFuel и добавил ее к движению ракетного корабля, чтобы он проверял каждый раз, когда движется ракетный корабль, а также в конце движения топливного бака.
Похоже, проблема заключается в том, что, поскольку я посылаю мне движение топливного бака каждые 50 миллисекунд, он добавляет больше топлива, если контейнер и ракетный корабль все еще пересекаются. поэтому вместо 50 топлива он добавляет 150 к топливу.
Я использую тот же код для вычитания жизней, если астероид сталкивается с ракетным кораблем, но он просто вычтет все жизни и завершит игру после 1 столкновения.
` // Getting the fuel canister moving
command moveFuelCanister
if sMoving then
set top of image "Fuel Canister.png" to top of image "Fuel Canister.png"+15
if top of image "Fuel Canister.png" > 768 then
set the randomSeed to the long seconds
put random(1024) into randomWidth
set location of image "Fuel Canister.png" to randomWidth,0
end if
send moveFuelCanister to me in 50 milliseconds
end if
checkFuel
end moveFuelCanister
//Checking if the ship hits the fuel
command checkFuel
if intersect(image "rocketshipUp", image "Fuel Canister.png" ,"pixels") \
OR intersect(image "rocketshipDown", image "Fuel Canister.png" ,"pixels") \
OR intersect(image "rocketshipLeft", image "Fuel Canister.png" ,"pixels") \
OR intersect(image "rocketshipRight", image "Fuel Canister.png" ,"pixels")
then
add 50 to gFuelLevel
put "Fuel Level: " & gFuelLevel into field "Fuellevellbl"
end if
end checkFuel `
2 ответа
Есть несколько вариантов решения этой проблемы. Вы можете:
- сбросить топливную канистру в верхней части экрана при первом попадании
- при первом попадании скрыть канистру с топливом
- установить пользовательское свойство на канистру с топливом при ударе
Последний вариант вносит минимальные изменения в работу вашей игры, но, не видя весь код, сложно точно сказать, что вы хотите сделать.
Вот последний вариант:
command moveFuelCanister
if sMoving then
set top of image "Fuel Canister.png" to top of image "Fuel Canister.png"+15
if top of image "Fuel Canister.png" > 768 then
set the randomSeed to the long seconds
put random(1024) into randomWidth
set location of image "Fuel Canister.png" to randomWidth,0
set the uHit of image "Fuel Canister.png" to false
end if
send moveFuelCanister to me in 50 milliseconds
end if
checkFuel
end moveFuelCanister
//Checking if the ship hits the fuel
command checkFuel
if not the uHit of image "Fuel Canister.png" \
and (intersect(image "rocketshipUp", image "Fuel Canister.png" ,"pixels") \
OR intersect(image "rocketshipDown", image "Fuel Canister.png" ,"pixels") \
OR intersect(image "rocketshipLeft", image "Fuel Canister.png" ,"pixels") \
OR intersect(image "rocketshipRight", image "Fuel Canister.png" ,"pixels"))
then
set the uHit of image "Fuel Canister.png" to true
add 50 to gFuelLevel
put "Fuel Level: " & gFuelLevel into field "Fuellevellbl"
end if
end checkFuel
Другие варианты могут изменить изображение, чтобы показать пустую канистру с топливом, падающую после удара.
Другая идея, использовать локальную переменную сценария, чтобы обеспечить только одно увеличение расхода топлива за удар...
//Checking if the ship hits the fuel
local sAddFuel --** Use a script local var for checking collisions **
command checkFuel
if intersect(image "rocketshipUp", image "Fuel Canister.png" ,"pixels") \
OR intersect(image "rocketshipDown", image "Fuel Canister.png" ,"pixels") \
OR intersect(image "rocketshipLeft", image "Fuel Canister.png" ,"pixels") \
OR intersect(image "rocketshipRight", image "Fuel Canister.png" ,"pixels") then
add 1 to sAddFuel --** counts up for each intersect command **
else
put 0 into sAddFuel --** Resets back to zero when no intersect **
end if
if sAddFuel = 1 then --** Will only add fuel for 1st collision **
add 50 to gFuelLevel
put "Fuel Level: " & gFuelLevel into field "Fuellevellbl"
end if
end checkFuel