Я кодирую видеоигру в kaboom.js (в первый раз). В основном он включает в себя работающий персонаж (статический на экране), который должен прыгать на движущихся блоках. Это 2D, конечно. Блоки, которые я упомянул, должны быть в последовательности (ряд движущихся блоков). Игрок может коснуться блоков. Однако, когда он влияет на один из них, он движется (из -за вариантов гравитации в kaboom.js. Это не должно. /> Я пытался установить свойство Body () в блоки, даже Solid ().export function loadGameScene(){
scene("game", () => {
const bg = add([
sprite("bg", { width: width(), height: height() })
]) //background
const ground = add([
pos(0, height() - 50),
rect(width()+1000, 30),
area(),
opacity(0),
solid()
]) //base rect
const player = add([
sprite(players[0]),
pos(150, height() - 190),
area(),
body(),
scale(0.35),
]);//player
//PLAYER RUNNING ANIMATION
let currentFrame = 0;
setInterval(() => {
currentFrame = (currentFrame + 1) % players.length;
player.use(sprite(players[currentFrame]));
}, 165);
//movement
onKeyDown("right", () => {
if (!player.isGrounded()) {
player.move(300, 0);
} else {
player.move(155, 0);
}
});
//blocks dragging
player.onCollide("platform", ()=>{
player.move(-50,0)
})
//BLOCKS SPAWNING
let previous = "block4_grJump";
let lastBlock = null;
let cycle = 0
//
function spawnRndGRBlock() {
let blockSpeed = 150;
let blockY = 580;
let bkName = choose(blockNamesGround);
let spawnX;
if (previous === "block4_grJump" || previous === "block4_grJump1" || previous === "block4_grJump2") {
bkName = choose(["block1_small", "block5_fire", "block5_spike"]);
}
if (previous === "block5_fire" || previous === "block5_spike") {
bkName = "block1_small";
}
switch(bkName){
case "block4_grJump2":
blockY = 500;
break
case "block4_grJump":
blockY = 499;
break
case "block4_grJump1":
blockY = 499;
break
case "block5_fire":
blockY = 517;
break
case "block5_spike":
blockY = 540.3;
break
}
previous = bkName;
if (lastBlock) {
spawnX = lastBlock.pos.x + lastBlock.realWidth
} else {
spawnX = width()
}
//the first block is always the standard one
let jumpUp
let up_down =false
//player's jump and sprite
if(cycle===0){
bkName="block1_small"
jumpUp = add([
sprite("jump"),
pos(spawnX-200, blockY-155),
move(LEFT, blockSpeed),
scale(0.32)
])
setInterval(() => {
if(!up_down){
jumpUp.pos.y += 20;
up_down=true
}
else{
jumpUp.pos.y -= 20;
up_down=false
}
}, 700);
}
onKeyPress(["space", "up", "w"], () => {
if (player.isGrounded()) {
player.jump(720);
destroy(jumpUp)
}
});
cycle++
//BLOCKS VARIABLE PROPERTIES
const block = add([
sprite(bkName),
pos(spawnX, blockY),
scale(0.35),
area(),
body(),
move(LEFT, blockSpeed),
"platform",
]);
const realWidth = block.width * block.scale.x;
block.realWidth = realWidth;
//BLOCKS IN SEQUENCE
block.onUpdate(() => {
if (!block.spawnedNext && (block.pos.x + block.width) < width()+3000) {
block.spawnedNext=true
spawnRndGRBlock();
}
if (block.pos.x < -block.realWidth) {
destroy(block);
}
});
lastBlock = block;
}
spawnRndGRBlock();
});
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... -collision
Движущиеся блоки и столкновение персонажа ⇐ Javascript
Форум по Javascript
1755563146
Anonymous
Я кодирую видеоигру в kaboom.js (в первый раз). В основном он включает в себя работающий персонаж (статический на экране), который должен прыгать на движущихся блоках. Это 2D, конечно. Блоки, которые я упомянул, должны быть в последовательности (ряд движущихся блоков). Игрок может коснуться блоков. Однако, когда он влияет на один из них, он движется (из -за вариантов гравитации в kaboom.js. Это не должно. /> Я пытался установить свойство Body () в блоки, даже Solid ().export function loadGameScene(){
scene("game", () => {
const bg = add([
sprite("bg", { width: width(), height: height() })
]) //background
const ground = add([
pos(0, height() - 50),
rect(width()+1000, 30),
area(),
opacity(0),
solid()
]) //base rect
const player = add([
sprite(players[0]),
pos(150, height() - 190),
area(),
body(),
scale(0.35),
]);//player
//PLAYER RUNNING ANIMATION
let currentFrame = 0;
setInterval(() => {
currentFrame = (currentFrame + 1) % players.length;
player.use(sprite(players[currentFrame]));
}, 165);
//movement
onKeyDown("right", () => {
if (!player.isGrounded()) {
player.move(300, 0);
} else {
player.move(155, 0);
}
});
//blocks dragging
player.onCollide("platform", ()=>{
player.move(-50,0)
})
//BLOCKS SPAWNING
let previous = "block4_grJump";
let lastBlock = null;
let cycle = 0
//
function spawnRndGRBlock() {
let blockSpeed = 150;
let blockY = 580;
let bkName = choose(blockNamesGround);
let spawnX;
if (previous === "block4_grJump" || previous === "block4_grJump1" || previous === "block4_grJump2") {
bkName = choose(["block1_small", "block5_fire", "block5_spike"]);
}
if (previous === "block5_fire" || previous === "block5_spike") {
bkName = "block1_small";
}
switch(bkName){
case "block4_grJump2":
blockY = 500;
break
case "block4_grJump":
blockY = 499;
break
case "block4_grJump1":
blockY = 499;
break
case "block5_fire":
blockY = 517;
break
case "block5_spike":
blockY = 540.3;
break
}
previous = bkName;
if (lastBlock) {
spawnX = lastBlock.pos.x + lastBlock.realWidth
} else {
spawnX = width()
}
//the first block is always the standard one
let jumpUp
let up_down =false
//player's jump and sprite
if(cycle===0){
bkName="block1_small"
jumpUp = add([
sprite("jump"),
pos(spawnX-200, blockY-155),
move(LEFT, blockSpeed),
scale(0.32)
])
setInterval(() => {
if(!up_down){
jumpUp.pos.y += 20;
up_down=true
}
else{
jumpUp.pos.y -= 20;
up_down=false
}
}, 700);
}
onKeyPress(["space", "up", "w"], () => {
if (player.isGrounded()) {
player.jump(720);
destroy(jumpUp)
}
});
cycle++
//BLOCKS VARIABLE PROPERTIES
const block = add([
sprite(bkName),
pos(spawnX, blockY),
scale(0.35),
area(),
body(),
move(LEFT, blockSpeed),
"platform",
]);
const realWidth = block.width * block.scale.x;
block.realWidth = realWidth;
//BLOCKS IN SEQUENCE
block.onUpdate(() => {
if (!block.spawnedNext && (block.pos.x + block.width) < width()+3000) {
block.spawnedNext=true
spawnRndGRBlock();
}
if (block.pos.x < -block.realWidth) {
destroy(block);
}
});
lastBlock = block;
}
spawnRndGRBlock();
});
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79739352/moving-blocks-and-character-collision[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия