Search Header Logo
colorfullCollision

colorfullCollision

Assessment

Presentation

Computers

1st Grade

Practice Problem

Medium

Created by

Edukoht Edukohter

Used 10+ times

FREE Resource

53 Slides • 6 Questions

1

colorfullCollision

Slide image

2

Создай новый проект

Зайди на сайт https://repl.it/ и создай новый проект.

3

Начинаем разработку с HTML

Slide image

4

Привычные действия

Добавляем тег «canvas» в элемент «body».

5

Slide image


6

В этот раз мы пропускаем CSS


Slide image

7

Зато начинаем плотную работу в JS

Slide image

8

Привычные действия

Создай переменную «canv» и присвой ей выбранный элемент «canvas». Сделай так, чтобы элемент «canvas» занимал весь экран редактора. Создай переменную «c» и присвой ей элемент «canvas» с методом «getContext("2d")».

9

Slide image


10

Multiple Choice

Вспомни с каким типом данных ты познакомилась(лся) на прошлом уроке?

1

список

2

цикл

3

объект

4

hash-map

11

Привычные действия

Создай конструктор объектов с именем «sqares». Передай в конструктор вот такие параметры: x, y, w, h, speedX, speedY, color.

12

Slide image


13

Привычные действия

Внутри конструктора создай локальные переменные для объектов. Для этого воспользуйся ключевым словом this.

Пример: this.x = x

14

Slide image


15

Привычные действия

Создаем метод «update».

16

Slide image


17

Привычные действия

Создаем в этом методе if-блок. Указываем if-блоку вот такое условие: this.x + this.w > canv.width || this.x - this.w < 0

Если условие выдает значение «true», то выполняем вот такую команду:

this.speedX = -this.speedX;

18

Slide image


19

Multiple Choice

Для чего нужно условие: this.x + this.w > canv.width || this.x - this.w < 0 ?

1

Чтобы прямоугольник не улетал за канвас вправо и влево

2

Чтобы прямоугольник двигался

3

Чтобы прямоугольник сталкивались друг с другом

4

Чтобы прямоугольник не улетал за канвас вверх или вниз

20

Привычные действия

Выходим из if-блока и создаем в этом методе еще один if-блок. Указываем if-блоку вот такое условие: this.y + this.h > canv.height || this.y - this.h < 0

Если условие выдает значение «true», то выполняем вот такую команду:

this.speedY = -this.speedY;

21

Slide image


22

Multiple Choice

Для чего нужно условие: this.y + this.h > canv.height || this.y - this.h < 0 ?

1

Чтобы вовремя менять цвет прямоугольника

2

Чтобы прямоугольник не улетал за канвас вверх и вниз

3

Чтобы проверить прямоугольники на столкновение

4

Чтобы добавить пафоса коду

23

Привычные действия

Выходим из if-блока. Внутри метода указываем вот такие команды:  this.x += this.speedX

 this.y += this.speedY

this.draw()

24

Slide image

25

Multiple Choice

Что делает команда: this.x += this.speedX?

1

Увеличивает скорость движения прямоугольника

2

Двигает прямоугольник по горизонтали

3

Двигает прямоугольник по вертикали

4

Меняет цвет прямоугольника

26

Multiple Choice

Что делает команда: this.y += this.speedY?

1

Проверяет прямоугольники на столкновения друг с другом

2

Создает множество прямоугольников

3

Служит запуском программы

4

Двигает прямоугольник по вертикали

27

Привычные действия

Создаем метод «draw».

28

Slide image


29

Привычные действия

Пишем в данные метод вот такие команды:

c.fillStyle = this.color

        c.fill()

        c.beginPath()

        c.rect(this.x,this.y,this.w,this.h)

        c.stroke()

30

Slide image


31

Multiple Choice

Что делает метод «rect»?

1

Создаёт линию

2

Создает круг

3

Создает прямоугольник

4

Создает закрещенный прямоугольник

32

Привычные действия

Создаем список с именем «sqaresArr».

33

Slide image


34

Привычные действия

Создаем функции: randomY и randomX. Добавляем ей конструкцию: return Math.floor(Math.random() * canv.height) и return Math.floor(Math.random() * canv.width)

35

Slide image


36

Привычные действия

Создаем функции: randomHeight и randomWidth. Добавляем им вот такую конструкцию:  

return Math.floor(Math.random() * 20) + 10

PS: вы можете поэкспериментировать с циферками ;)

37

Slide image


38

Привычные действия

Создаем функции: randomSpeedY и randomSpeedX. Указываем им вот такую конструкцию:

 return Math.floor(Math.random() * 1) + 1

39

Slide image


40

Что-то новенькое

Создаем функцию с именем «collision» и указываем у нее вот такие параметры: x1, y1, w1, h1, x2, y2, w2, h2

Внутри функции создаем if-блок и указываем у него вот такое условие:

x2 > w1 + x1 || x1 > w2 + x2 || y2 > h1 + y1 || y1 > h2 + y2

41

Что-то новенькое

Если условие выдает «true», то программа должна выполнить вот такой код:

 return false;

Иначе она должна должна выполнить вот такой код:

else{ 

        return true

    }

42

Посмотрим поближе

В предыдущим условии мы делаем проверку на столкновение. Рассмотрим вот такой пример: у нас есть два квадрата, которые движутся. По нашему условию, если координата x второго квадратика больше чем координата x первого квадратика плюс его ширина, то мы можем гарантировать, что эти квадратики не сталкиваются. В нашем условии такая проверка производится по двум квадратикам по сторонам x и y.

43

Slide image


44

Привычные действия

Создаем функцию с именем «randomColor». Внутри функции создаем вот такие переменные: red, green, blue. Присваиваем этим переменным вот такую конструкцию: Math.floor(Math.random()*256);

Добавляем в конце функции команду: return "rgba(" + red + "," + green + "," + blue  + ")"


45

Slide image


46

Привычные действия

Создай цикл со счетчиком. Сделай так, чтобы твой цикл повторялся 10 или больше раз. Укажи в теле цикла вот такую конструкцию:

sqaresArr.push(new sqares(randomX(),randomY(), randomWidth(), 

randomHeight(),randomSpeedX(),randomSpeedY(),"black"))

47

Slide image


48

Привычные действия

Создай конструкцию «setInterval» укажи у этой конструкции вот такие параметры: function(){}, 10

49

Slide image


50

Привычные действия

Добавь в функцию конструкции «setInterval» команду: c.clearRect(0,0,canv.width,canv.height)

51

Slide image


52

Привычные действия

Создай цикл со счетчиком. Используй в цикле переменную «j». Сделай так, чтобы цикл выполнялся такое же количество раз, сколько элементов находится в списке «sqaresArr». В теле цикла укажи вот такую команду:

sqaresArr[j].update()

53

Slide image


54

Привычные действия

Выйди из тела цикла и создай еще один цикл со счетчиком. Используй в этом цикле переменную «i». Внутри цикла укажи вот такую конструкцию: let s1 = sqaresArr[i]

55

Slide image


56

Что-то новое

Создай внутри цикла еще один цикл со счетчиком. Используй в этом цикле переменную «z». Начинай отсчет не от нуля, а от i + 1.

Внутри этого цикла укажи вот такую команду:

let s2 = sqaresArr[z]. Также создай внутри этого цикла if-блок.


57

Slide image


58

Что-то новое

Укажи в if-блоке вот такое условие: collision(s1.x,s1.y,s1.w,s1.h,s2.x,s2.y,s2.w,s2.h)

Если условие выдает «true», то выполни вот такой код:

s1.color = randomColor()

s2.color = randomColor()

59

Slide image


colorfullCollision

Slide image

Show answer

Auto Play

Slide 1 / 59

SLIDE