Try it out
1. Мячик в невесомости
1.1. Создадим проект, назначив размеры экрана и его физические границы.width = 600
height = 400
GraphicsWindow.Width = width
GraphicsWindow.Height = height
LDPhysics.SetBoundaries(0,width,0,height)
1.2. Добавим мячик и изменим его расположение.
hero = Shapes.AddEllipse(30,30)
LDPhysics.AddMovingShape(hero,.3,0.5,1)
LDPhysics.SetPosition(hero,250,height-32,0)
1.3. При нажатии на стрелки на клавиатуре будем указывать направление движения, при отжатии клавиши направление будет обнуляться.
GraphicsWindow.KeyDown = onKeyDown
GraphicsWindow.KeyUp = onKeyUp
Sub onKeyDown
k = GraphicsWindow.LastKey
If (k = "Left") Then
left = 1
ElseIf (k = "Right") Then
right = 1
ElseIf (k = "Up") Then
up = 1
ElseIf (k = "Down") Then
down = 1
EndIf
EndSub
Sub onKeyUp
k = GraphicsWindow.LastKey
If (k = "Left") Then
left = 0
ElseIf (k = "Right") Then
right = 0
ElseIf (k = "Up") Then
up = 0
ElseIf (k = "Down") Then
down = 0
EndIf
EndSub
1.4. Добудем массу объекта. Она понадобится для того, чтобы придавать ему ускорение в будущем.
mass = LDPhysics.GetMass(hero)
1.5. Создадим игровой цикл. В нём будем давать ускорение для мячика в зависимости от того, какое направление сейчас активно.
While "True"
If (left = 1) Then
LDPhysics.SetImpulse(hero,-2*mass,0) ' Дать ускорение по оси Х в размере -2 массы (влево)
EndIf
If (right = 1) Then
LDPhysics.SetImpulse(hero,2*mass,0)
EndIf
If (up = 1) Then
LDPhysics.SetImpulse(hero,0,-2*mass)
EndIf
If (down = 1) Then
LDPhysics.SetImpulse(hero,0,2*mass)
EndIf
LDPhysics.DoTimestep()
Program.Delay(20)
EndWhile
1.6. Пора убрать гравитацию. По умолчанию, гравитация по оси х = 0, по оси у = 100.
LDPhysics.SetBoundaries(0,width,0,height)
LDPhysics.SetGravity(0,0)
Таким образом, можно настраивать уровень гравитации в игре, её направление.
2. Пуля и коробаны.
Создадим проект, в котором будем давать шарику начальное ускорение и он будет сбивать ящики, собранные в столбик.2.1. Базовый шаблон:
width = 600
height = 400
GraphicsWindow.Width = width
GraphicsWindow.Height = height
LDPhysics.SetBoundaries(0,width,0,height)
2.2. Создадим вертикальный ряд из кубиков, добавив им физики:
For i = 1 To 20
block[i] = Shapes.AddRectangle(20,20)
LDPhysics.AddMovingShape(block[i],0.3,0.8,1)
LDPhysics.SetPosition(block[i],500,height-20*i+10,0)
EndFor
2.3. Создадим маленький шарик.
bullet = Shapes.AddEllipse(8,8)
LDPhysics.AddMovingShape(bullet,0,1,1)
LDPhysics.SetPosition(bullet,50,200,0)
2.4. Зададим ему большую скорость по оси Х:
LDPhysics.SetVelocity(bullet,1000,0)
2.5. Игровой цикл.
While "True"
LDPhysics.DoTimestep()
Program.Delay(20)
EndWhile
В конспект
Настройки гравитации
LDPhysics.SetGravity(gravX, gravY)Получить массу объекта
mass = LDPhysics.GetMass(object)Дать объекту ускорение (импульс, удар)
LDPhysics.SetImpulse(shapeName, impulseX, impulseY)Установить скорость объекта
SetVelocity(shapeName, velX, velY)Задачи
Задача 1*. Чем отличается установка скорости объекта от ускорения объекта? Попробуйте проверить на практике.Задача 2*. Настройте скорость пули из кода Try it out 2 так, чтобы она сбивала только один верхний ящик с первого выстрела.
Задача 3***. Создайте проект "Сбор космического мусора". Видео проекта:
Подсказки: вам понадобится расчёт расстояния от центра зоны сбора мусора (зелёная) до центра ящика и расчёт скорости объекта. Мусор съедается только при условии, что расстояние до него от зоны меньше 50 и скорость этого мусора меньше 40. Чтобы рассчитать скорость, используйте такой код:
Sub getVelocity
velocityArray = LDPhysics.GetVelocity(box)
velocity = Math.SquareRoot(Math.Power(velocityArray[1],2) + Math.Power(velocityArray[2],2))
EndSub
Задача 4***. Добавляйте очки за каждый собранный ящик мусора. Чем медленнее мусор заходит в мусоросбор, тем больше очков пусть даётся.
Например, если скорость velocity ящика на момент исчезновения была 32, то пусть даётся 8 очков, если скорость была 20, то пусть начисляется 20 очков и т.п.
Задача 5*. Добавьте таймер, за который нужно собрать как можно больше мусора.
Задача 6****. Добавьте второго игрока и второй мусоросборник. Добавьте несколько ящиков разного цвета, которые будут давать разное количество победных очков. Добавьте определение победителя как того, кто больше соберёт мусора.
Комментарии
Отправить комментарий