FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Medlem
|
Håller på att göra en litet test spel åt broshan och då tänkte jag en 2d platformer. Men nu har jag problem med att få "gubben" att kollidera med mina "blocks".
Jag har redan en metod i min "player" node/klass/sak (vet inte vad man kallar klasser i javascript för) och som kollar OM man kolliderar. Funkar fint men nu vill jag kolla från vilket håll man kolliderar. Alltså följande riktningar: NORTH - player.y = block.tile.y WEST - player.x = block.tile.x SOUTH - player.y = block.tile.y + block.tile.height EAST - player.x = block.tile.x + block.tile.width och dessa för om man sätter sig i ett hörn(tänker jag rätt här? För man kolliderar ju isåfall med 2 olika block och gör därefter ändringarna???). Så dessa KANSKE behövs, jag vet inte riktigt :/ NORTHEAST NORTHWEST SOUTHEAST SOUTHWEST Här är koden som endast kollar. Jag har en array där jag lägger varje blocks ID och tar bort det därefter om jag "av"-kolliderar(?) HTML-kod:
collides: function(block) { var collide = (Math.abs(this.x - block.tile.x) * 2 < (this.width + block.tile.width)) && (Math.abs(this.y - block.tile.y) * 2 < (this.height + block.tile.height)); if(collide) { if(!inArray(block.id, this.colliding)) { this.colliding.push(block.id); } } else { if(inArray(block.id, this.colliding)) { this.colliding = removeFromArray(block.id, this.colliding); } } return false; } HTML-kod:
handleCollision: function(block) { // Now what? } ![]() Senast redigerad av secag den 2013-05-30 klockan 16:53 |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Medlem
|
Kolla och jämför respektive objekts koordinater i relation till din "spelplan"?
|
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Medlem
|
jo det förstår ja väl också men jag vet inte hur jag ska skriva.
|
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Medlem
|
BUMP!
Ser ut såhär nu: HTML-kod:
handleCollision: function(block) {
// Approaching from left
if(this.x + this.width > block.tile.x) {
this.x = block.tile.x;
}
// Approaching from right
if(this.x < block.tile.x + block.tile.width) {
this.x = block.tile.x + block.tile.width;
}
// Approaching from top
if(this.y + this.height > block.tile.y) {
this.y = block.tile.y;
}
// Approaching from bottom
if(this.y < block.tile.y + block.tile.height) {
this.y = block.tile.y + block.tile.height;
}
}
![]() ![]() En kompis frågade i vilken ordning allting sker så då sa jag: Kolla tangenttryck och sätt KEY_DOWN, KEY_UP osv... till true/false kolla om "gubben" kolliderar(är inuti ett svart block), här körs handleCollision() och sen kör jag update() metoden i "gubbe" klassen. HTML-kod:
update: function() {
if(this.RIGHT) {
this.velX = this.speed;
}
if(this.LEFT) {
this.velX = -this.speed;
}
if(this.UP) {
this.velY = -this.speed;
}
if(this.DOWN) {
this.velY = this.speed;
}
this.x += this.velX;
this.y += this.velY;
if(this.y >= canvas_height - this.height) {
this.y = canvas_height - this.height;
} else if(this.y <= 0) {
this.y = 0;
}
if (this.x >= canvas_width-this.width) {
this.x = canvas_width-this.width;
} else if (this.x <= 0) {
this.x = 0;
}
this.velX = 0;
this.velY = 0;
},
Senast redigerad av secag den 2013-06-01 klockan 15:58 |
||
![]() |
![]() |
Svara |
|
|