2016-01-16 1 views
0

пожалуйста, помогите !!!!маленький базовый возврат форма положение после того, как он вышел из экрана

я имею маленькую проблему с небольшим основным

я хотел сделать небольшую игру, где НЛО, чтобы избежать астероидов, и я сделал астероид и анимированным его, а затем я хотел сделать его у положение вернуться к 0 вэнь он прошел экран ..

meteimg = "C:\Users\user\Desktop\meteo.png" 
meteorite = Shapes.AddImage(meteimg) 

meteoriteX = Math.GetRandomNumber(GraphicsWindow.Width) 
Shapes.Move(meteorite, meteoriteX, 0) 
Shapes.Animate(meteorite, meteoriteX, GraphicsWindow.Height,Math.GetRandomNumber(2000)) 

, а затем я должен добавить что-то вроде

if meteorite's y position > graphicsWindow.height then 
shapes.move(meteorite, meteoriteX, 0) 
endif 
+0

и я сделал это для того, чтобы сделать движение ufo, оно работает, но движение задерживается .. есть ли способ исправить это? –

ответ

1

Вы не должны использовать shape.animate для этого. Вы не можете получить позицию объекта во время его перемещения. Вот какой код для астроидов:

NumAstroids = 10 
For i = 1 To NumAstroids 
Astroid[i] = Shapes.AddEllipse(20,20) 
AstroidX[i] = Math.GetRandomNumber(GraphicsWindow.Width-20) 
AstroidY[i] = -Math.GetRandomNumber(GraphicsWindow.Height) 
AstroidSpeed[i] = Math.GetRandomNumber(4) + 1 '<- Min speed is 1 
EndFor 

While 1 = 1 
Program.Delay(10) 
For i = 1 To NumAstroids 
Shapes.Move(Astroid[i],AstroidX[i],AstroidY[i]) 
AstroidY[i] = AstroidY[i] + AstroidSpeed[i] 
If AstroidY[i] > GraphicsWindow.Height Then 
    AstroidX[i] = Math.GetRandomNumber(GraphicsWindow.Width-20) 
    AstroidY[i] = -Math.GetRandomNumber(50)-20 
    AstroidSpeed[i] = Math.GetRandomNumber(4) + 1 '<- Min speed is 1 
EndIf 
EndFor 
EndWhile 
+0

большое спасибо, это очень помогло –

0
meteorite's y position 

это, насколько я знаю, равна

Shapes.GetTop(meteorite) 

И вы должны проверить, что в цикле, если он будет двигаться вокруг.

+0

Я работал с этим, прежде чем в игре, вы должны использовать «флаги», потому что компьютер не обновляет экран до тех пор, пока не произойдет все. вы работаете с событиями с привязкой клавиш? – Matthew

+0

Это может быть полезно, нажмите на эту ссылку, чтобы узнать о задержке и флагах -> https://social.msdn.microsoft.com/Forums/en-US/86e2da64-5ad7-42d0-9a25-1b72407a85ef/the -фотографии-ду-не-хочу-к-шоу-до-который-это-из-за-заместитель задержки я-нет-нет-ключ-на-How-To-Do-это? форум = SmallBASIC# 12d0cb19-5161 -41a8-9564-ade533151ab0 – Matthew

+0

Никаких флагов не требуется, в этом случае я бы рекомендовал цикл While, который регулярно проверяет позицию элементов. В лучшем случае то же самое нужно также перемещать, поэтому движущиеся объекты будут иметь только определенную скорость дельта и дельта. Флаги/события для пользовательских вещей, например, щелчки мыши. Посмотрите эту игру: https://mega.nz/#!OJMDWARK!TjgjQzIijkrMOyO_m_O_c1uE413V3BB3n4E8smzPJUI Его игра с защитой от башенки, которую я не закончил, она не будет работать на вашем компьютере, так как ей нужны некоторые расширения и множество графических файлов, но внутри вы найдете хорошие принципы перемещения объектов в основной цикл. – ViteXikora