kiremit esaslı merdivenlerden yukarı yürümek. Şimdiye kadar çalışmam için oyuncu hareketi ve rastgele seviye tohumları aldım.Phaser JS bir öğrenme deneyimi olarak başıma ben Phaser js içinde, küçük bir 2d-Minecraft klon kuruyorum
Ben Fazerler P2JS motorunu kullanarak ve kutu tabanlı sprite var duyuyorum. Şu anda uğraştığım şey: Oyuncunun engelsiz küçük yükseklikleri (1-kiremit yüksekliğinde) yürümesini istiyorum ama bunu nasıl uygulayacağımı iyi bir fikrim yok.
Ben o dibinde eğim vardı ki oyuncunun sınırlama kutusunu değiştirme denedi ama bu duvar tırmanışı ile sorun bir grup beni alır. Mümkün olduğunca kesintisiz olduğu yerde bunu yapmak için bir yol istiyorum. Tercihen, oyuncunun hızı, basamaklar tırmanarak çok fazla değiştirilmez. Bunu yapmanın en iyi yolu ise bu işlemek için çarpışma algılama fonksiyonu çeşit yazma concidering am
ama şüpheliyim.
Yardımlarınız için teşekkürler.
Aşağıda benim kod ve ben yürümeyi beable istediğiniz adımın tür gösteren bir resimdir. Görüntüdeki soldaki ilk yükseklik.
var pablo = require('../generators/pablo.js');
var destiny = {};
var socket;
var player;
var jumpButton;
var levelCollisionGroup;
var playerCollisionGroup;
destiny.create = function() {
console.info("game loaded");
// World
this.game.world.setBounds(0, 0, 4000, 1000);
this.game.physics.startSystem(Phaser.Physics.P2JS);
this.game.physics.p2.gravity.y = 600;
this.game.physics.p2.applySpringForces= false;
this.game.physics.p2.applyDamping= false;
this.game.physics.p2.restitution = 0;
this.game.physics.p2.friction = 0.01;
// Player
playerCollisionGroup = this.game.physics.p2.createCollisionGroup();
player = this.game.add.sprite(this.game.world.centerX, 800, 'player');
this.game.physics.p2.enable(player,true);
player.body.fixedRotation = true;
player.body.setCollisionGroup(playerCollisionGroup);
player.body.mass = 2;
// Camera
this.game.camera.follow(player);
this.game.camera.deadzone = new Phaser.Rectangle(200, 0, 400, 100);
// Controls
jumpButton = this.game.input.keyboard.addKey(Phaser.Keyboard.SPACEBAR);
leftButton = this.game.input.keyboard.addKey(Phaser.Keyboard.A);
rightButton = this.game.input.keyboard.addKey(Phaser.Keyboard.D);
// Level
levelCollisionGroup = this.game.physics.p2.createCollisionGroup();
this.game.physics.p2.updateBoundsCollisionGroup();
for (i = 0; i < 280; i = i + 1) {
var block;
var height = pablo.getHeight(i);
for(j = 0; j < height; j = j + 1){
if(j === height-1){
block = this.game.add.sprite(15*i, 993-15*j, 'grass');
} else {
block = this.game.add.sprite(15*i, 993-15*j, 'dirt');
}
block.width = 15;
block.height = 15;
this.game.physics.p2.enable(block);
block.body.static=true;
block.body.immovable = true;
block.body.collides([levelCollisionGroup, playerCollisionGroup]);
block.body.setCollisionGroup(levelCollisionGroup);
if(j == height){
}
}
}
player.body.collides(levelCollisionGroup);
this.game.stage.backgroundColor = "#5599CC";
};
destiny.update = function() {
player.body.velocity.x=0;
if (leftButton.isDown) {
player.body.velocity.x = -200;
} else if (rightButton.isDown) {
player.body.velocity.x = 200;
}
if (jumpButton.isDown && this.checkIfCanJump()) {
player.body.velocity.y = -400;
}
};
destiny.render = function() {
this.game.debug.cameraInfo(this.game.camera, 32, 32);
this.game.debug.spriteCoords(player, 32, 550);
};
destiny.checkIfCanJump = function() {
var result = false;
for (var i=0; i < this.game.physics.p2.world.narrowphase.contactEquations.length; i++) {
var c = this.game.physics.p2.world.narrowphase.contactEquations[i];
if (c.bodyA === player.body.data || c.bodyB === player.body.data) {
var d = p2.vec2.dot(c.normalA, p2.vec2.fromValues(0, 1));
if (c.bodyA === player.body.data) {
d *= -1;
}
if (d > 0.5) {
result = true;
}
}
}
return result;
};
module.exports = destiny;
===================== Düzenleme ================ =====
Şimdi dünya oluştururken kenar parçalarının eğimleri oluşturma çalıştılar. Ama fark ettim ki bu daha sonra blokları kesmek için bir özellik eklediğimde dünyayı yeniden canlandırmak zorunda kalıyor. Böylece çözüm bu değil. Sanırım bir çarpışma tespiti yapmalı ve bir kenara çarptığımda oyuncuyu hareket ettirmeliyim. Ama bunu fazerde nasıl yapacağımı tam olarak bilmiyordum. Herhangi bir yardım hala takdir edilmektedir.
!!! İşte ne değildir bir resimdir !!!