0 / 0 / 0
Регистрация: 04.12.2022
Сообщений: 1

Код звездного неба, со звездами и падающей кометой

04.12.2022, 18:50. Показов 665. Ответов 0

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Есть готовый код (javascript) звездного неба, со звездами и падающей кометой. Необходимо в нем поменять некоторые элементы, а именно:
1) некоторые звезды должны немного увеличиваться (в 1.5 раза), а затем возвращаться к изначальному состоянию
2) комета должна лететь раз в 20 секунд с правого верхнего угла экрана в левый нижний угол, пересекая всё поле

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame ||
  window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
 
var starDensity = .116;
var speedCoeff = .05;
var width;
var height;
var starCount;
var circleRadius;
var circleCenter;
var first = true;
var giantColor = '180,184,240';
var starColor = '226,225,142';
var cometColor = '226,225,224';
var canva = document.getElementById('universe');
var stars = [];
 
windowResizeHandler();
window.addEventListener('resize', windowResizeHandler, false);
 
createUniverse();
 
function createUniverse() {
  universe = canva.getContext('2d');
 
  for (var i = 0; i < starCount; i++) {
    stars[i] = new Star();
    stars[i].reset();
  }
 
  draw();
}
 
function draw() {
  universe.clearRect(0, 0, width, height);
 
  var starsLength = stars.length;
 
  for (var i = 0; i < starsLength; i++) {
    var star = stars[i];
    star.move();
    star.fadeIn();
    star.fadeOut();
    star.draw();
  }
 
  window.requestAnimationFrame(draw);
}
 
function Star() {
 
  this.reset = function() {
    this.giant = getProbability(3);
    this.comet = this.giant || first ? false : getProbability(10);
    this.x = getRandInterval(0, width - 10);
    this.y = getRandInterval(0, height);
    this.r = getRandInterval(1.1, 2.6);
    this.dx = getRandInterval(speedCoeff, 6 * speedCoeff) + (this.comet + 1 - 1) * speedCoeff * getRandInterval(50, 120) + speedCoeff * 2;
    this.dy = -getRandInterval(speedCoeff, 6 * speedCoeff) - (this.comet + 1 - 1) * speedCoeff * getRandInterval(50, 120);
    this.fadingOut = null;
    this.fadingIn = true;
    this.opacity = 0;
    this.opacityTresh = getRandInterval(.2, 1 - (this.comet + 1 - 1) * .4);
    this.do = getRandInterval(0.0005, 0.002) + (this.comet + 1 - 1) * .001;
  };
 
  this.fadeIn = function() {
    if (this.fadingIn) {
      this.fadingIn = this.opacity > this.opacityTresh ? false : true;
      this.opacity += this.do;
    }
  };
 
  this.fadeOut = function() {
    if (this.fadingOut) {
      this.fadingOut = this.opacity < 0 ? false : true;
      this.opacity -= this.do / 2;
      if (this.x > width || this.y < 0) {
        this.fadingOut = false;
        this.reset();
      }
    }
  };
 
  this.draw = function() {
    universe.beginPath();
 
    if (this.giant) {
      universe.fillStyle = 'rgba(' + giantColor + ',' + this.opacity + ')';
      universe.arc(this.x, this.y, 2, 0, 2 * Math.PI, false);
    } else if (this.comet) {
      universe.fillStyle = 'rgba(' + cometColor + ',' + this.opacity + ')';
      universe.arc(this.x, this.y, 1.5, 0, 2 * Math.PI, false);
 
      //comet tail
      for (var i = 0; i < 30; i++) {
        universe.fillStyle = 'rgba(' + cometColor + ',' + (this.opacity - (this.opacity / 20) * i) + ')';
        universe.rect(this.x - this.dx / 4 * i, this.y - this.dy / 4 * i - 2, 2, 2);
        universe.fill();
      }
    } else {
      universe.fillStyle = 'rgba(' + starColor + ',' + this.opacity + ')';
      universe.rect(this.x, this.y, this.r, this.r);
    }
 
    universe.closePath();
    universe.fill();
  };
 
  this.move = function() {
    this.x += this.dx;
    this.y += this.dy;
    if (this.fadingOut === false) {
      this.reset();
    }
    if (this.x > width - (width / 4) || this.y < 0) {
      this.fadingOut = true;
    }
  };
 
  (function() {
    setTimeout(function() {
      first = false;
    }, 50)
  })()
}
 
function getProbability(percents) {
  return ((Math.floor(Math.random() * 1000) + 1) < percents * 10);
}
 
function getRandInterval(min, max) {
  return (Math.random() * (max - min) + min);
}
 
function windowResizeHandler() {
  width = window.innerWidth;
  height = window.innerHeight;
  starCount = width * starDensity;
  circleRadius = (width > height ? height / 2 : width / 2);
  circleCenter = {
    x: width / 2,
    y: height / 2
  }
 
  canva.setAttribute('width', width);
  canva.setAttribute('height', height);
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.12.2022, 18:50
Ответы с готовыми решениями:

Карта звездного неба
помогите пожалуйста исправить код, не получается запустить все процедуры одновременно program nebo; uses crt,graph; const n=500; ...

Создание звёздного неба
Доброго времени суток, форумчане! Изучаю с недавнего времени java. Стало скучновато читать книгу и переписывать готовый код - решил...

Моделирование звездного неба
В языке Pascal создать программу для моделирования звездного неба на основании генератора случайных чисел. (сделано) program abc; uses...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.12.2022, 18:50
Помогаю со студенческими работами здесь

Анимация звездного неба
Нужно сделать эффект мерцающего неба, но могу только сделать мерцающую точку,как упростить задачу? Заранее спасибо!

Создание звездного неба XNA + C#
Вопрос такой... как его сделать... а вернее сделать не статическим ? что бы звезды двигались. В каком направдении копать ? 2D. ...

Создание карты звездного неба
Родилась идея по созданию карты звездного неба с возможностью масштабирования и прокрутки, а вот как реализовать и с чего начать пока не...

Вычисление средней светимости звёздного неба
Приветствую!! Подскажите пожалуйста: Как вычислить среднюю светимость звёздного неба, если в секторе вселенной (известно, какая у него...

графический вывод изображения звездного неба
Помогите пожалуйста решить задачу)) Обеспечить графический вывод изображения звездного неба,на котором некоторые звезды в случайном то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru