Мне нужен цикл, который будет добавлять число (или вычитать число) каждый раз, когда происходит столкновение

Я делаю это для школы. Я добавляю в уже существующую программу.

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