У меня есть анимация Three.js, которая изменяет сферу с помощью requestAnimationFrame(). Однако после отправки нескольких сообщений в окно чата анимация начинает быстро ускоряться. Я подозреваю, что создается несколько циклов анимации, но не могу понять, где именно.
Что я пробовал:
пробовал сбросить переменную currentProcessing
пробовал отменить анимацию после каждого сообщения, отправленного пользователем
Что я ожидаю, что анимация будет поддерживать постоянную скорость независимо от количества сообщений отправлено.
Как правильно предотвратить ускорение анимации с течением времени?
Вот код JavaScript:
const apiKey = '';
const apiUrl = `https://generativelanguage.googleapis.c ... y=${apiKey}`;
let boostedSpeed = 1.0;
let update;
let currentProcessing = 1;
$(document).ready(function() {
let $canvas = $('#blob canvas'),
canvas = $canvas[0],
renderer = new THREE.WebGLRenderer({
canvas: canvas,
context: canvas.getContext('webgl2'),
antialias: true,
alpha: true
}),
simplex = new SimplexNoise();
const data = await response.json();
console.log('API Response:', data);
const apiResponse = data.candidates[0].content.parts[0].text || "Sorry, I couldn't process that.";
botMessage.textContent = apiResponse;
} catch (error) {
console.error('Error fetching from Gemini API:', error);
botMessage.textContent = "Oops! Something went wrong while connecting to the server.";
}
points = [];
for (var x = 0; x < width; x = x + width / 20) {
for (var y = 0; y < height; y = y + height / 20) {
var px = x + Math.random() * width / 20;
var py = y + Math.random() * height / 20;
var p = {x: px, originX: px, y: py, originY: py};
points.push(p);
}
}
for (var i = 0; i < points.length; i++) {
var closest = [];
var p1 = points;
for (var j = 0; j < points.length; j++) {
var p2 = points[j];
if (!(p1 == p2)) {
var placed = false;
for (var k = 0; k < 5; k++) {
if (!placed) {
if (closest[k] == undefined) {
closest[k] = p2;
placed = true;
}
}
}
for (var k = 0; k < 5; k++) {
if (!placed) {
if (getDistance(p1, p2) < getDistance(p1, closest[k])) {
closest[k] = p2;
placed = true;
}
}
}
}
}
p1.closest = closest;
}
for (var i in points) {
var c = new Circle(points, 2 + Math.random() * 2, 'rgba(255,255,255,1)');
points.circle = c;
}
}
function addListeners() {
if (!('ontouchstart' in window)) {
window.addEventListener('mousemove', mouseMove);
}
window.addEventListener('scroll', scrollCheck);
window.addEventListener('resize', resize);
}
У меня есть анимация Three.js, которая изменяет сферу с помощью requestAnimationFrame(). Однако после отправки нескольких сообщений в окно чата анимация начинает быстро ускоряться. Я подозреваю, что создается несколько циклов анимации, но не могу понять, где именно. Что я пробовал: [list] [*]пробовал сбросить переменную currentProcessing [*]пробовал отменить анимацию после каждого сообщения, отправленного пользователем [/list] Что я ожидаю, что анимация будет поддерживать постоянную скорость независимо от количества сообщений отправлено. Как правильно предотвратить ускорение анимации с течением времени? Вот код JavaScript: const apiKey = ''; const apiUrl = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=${apiKey}`;
let boostedSpeed = 1.0; let update; let currentProcessing = 1;
$(document).ready(function() {
let $canvas = $('#blob canvas'), canvas = $canvas[0], renderer = new THREE.WebGLRenderer({ canvas: canvas, context: canvas.getContext('webgl2'), antialias: true, alpha: true }), simplex = new SimplexNoise();
const data = await response.json(); console.log('API Response:', data);
const apiResponse = data.candidates[0].content.parts[0].text || "Sorry, I couldn't process that."; botMessage.textContent = apiResponse;
} catch (error) { console.error('Error fetching from Gemini API:', error); botMessage.textContent = "Oops! Something went wrong while connecting to the server."; }
points = []; for (var x = 0; x < width; x = x + width / 20) { for (var y = 0; y < height; y = y + height / 20) { var px = x + Math.random() * width / 20; var py = y + Math.random() * height / 20; var p = {x: px, originX: px, y: py, originY: py}; points.push(p); } }
for (var i = 0; i < points.length; i++) { var closest = []; var p1 = points[i]; for (var j = 0; j < points.length; j++) { var p2 = points[j]; if (!(p1 == p2)) { var placed = false; for (var k = 0; k < 5; k++) { if (!placed) { if (closest[k] == undefined) { closest[k] = p2; placed = true; } } } for (var k = 0; k < 5; k++) { if (!placed) { if (getDistance(p1, p2) < getDistance(p1, closest[k])) { closest[k] = p2; placed = true; } } } } } p1.closest = closest; }
for (var i in points) { var c = new Circle(points[i], 2 + Math.random() * 2, 'rgba(255,255,255,1)'); points[i].circle = c; } }
function addListeners() { if (!('ontouchstart' in window)) { window.addEventListener('mousemove', mouseMove); } window.addEventListener('scroll', scrollCheck); window.addEventListener('resize', resize); }