2017-07-20 2 views
-1

je suis en train de faire un jeu de plateforme en AS3. Cependant, une chose avec laquelle lutter est de savoir comment gérer la détection de pente. De préférence id comme quelque chose de similaire à celle des jeux comme aventures pantalons fantaisie, mais id préfèrent vraiment pas utiliser une chose externe comme Box2D ou CDK, parce que les deux qui me confondez beaucoup et id préfèrent généralement juste de ne pas avoir un. Toutes mes tentatives ont eu le problème que je peux l'obtenir pour travailler avec quelques pentes mais pas toutes (par exemple, le caractère gère une pente, mais tombe à travers l'autre) puis quand je change pour convenir à l'autre, il ne convient pas au premier (par exemple un lecteur gère la deuxième pente, mais rebondit crazily au deuxième ... Ainsi, toute aide serait grandement appréciée ... Merci . code de est la suivante.AS3 Platformer pente Détection

//var setup 
var leftPressed: Boolean = false; 
var rightPressed: Boolean = false; 
var upPressed: Boolean = false; 
var downPressed: Boolean = false; 
var leftBumping: Boolean = false; 
var rightBumping: Boolean = false; 
var upBumping: Boolean = false; 
var downBumping: Boolean = false; 
var lowerleftBumping: Boolean = false; 
var lowerrightBumping: Boolean = false; 
var leftBumpPoint: Point = new Point(-30, -87); 
var rightBumpPoint: Point = new Point(30, -87); 
var lowerleftBumpPoint: Point = new Point(-32, -2); 
var lowerrightBumpPoint: Point = new Point(32, -2); 
var upBumpPoint: Point = new Point(0, -174); 
var downBumpPoint: Point = new Point(0, 0); 
var scrollX: Number = -4; 
var scrollY: Number = -68; 
var ySpeed: Number = 0; 
var xSpeed: Number = 0; 
var speedConstant: int = 5; 
var maxSpeedConstant: Number = 30; 
var frictionConstant: Number = 0.9; 
var gravityConstant: Number = 2; 
var jumpConstant: Number = -45; 
//game 
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); 
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler); 
stage.addEventListener(Event.ENTER_FRAME, loop); 
function keyDownHandler(e: KeyboardEvent): void { 
    if (e.keyCode == Keyboard.LEFT) { 
     leftPressed = true; 

    } else if (e.keyCode == Keyboard.RIGHT) { 
     rightPressed = true; 

    } else if (e.keyCode == Keyboard.UP) { 
     upPressed = true; 

    } else if (e.keyCode == Keyboard.DOWN) { 
     downPressed = true; 
    } 
} 

function keyUpHandler(e: KeyboardEvent): void { 
    if (e.keyCode == Keyboard.LEFT) { 
     leftPressed = false; 

    } else if (e.keyCode == Keyboard.RIGHT) { 
     rightPressed = false; 

    } else if (e.keyCode == Keyboard.UP) { 
     upPressed = false; 

    } else if (e.keyCode == Keyboard.DOWN) { 
     downPressed = false; 
    } 
} 

function loop(e: Event): void { 
    if (back.hitTestPoint(player.x + leftBumpPoint.x, player.y + leftBumpPoint.y, true)) { 
     trace("leftBumping"); 
     leftBumping = true; 
    } else { 
     leftBumping = false; 
    } 

    if (back.hitTestPoint(player.x + rightBumpPoint.x, player.y + rightBumpPoint.y, true)) { 
     trace("rightBumping"); 
     rightBumping = true; 
    } else { 
     rightBumping = false; 
    } 

    if (back.hitTestPoint(player.x + upBumpPoint.x, player.y + upBumpPoint.y, true)) { 
     trace("upBumping"); 
     upBumping = true; 
    } else { 
     upBumping = false; 
    } 

    if (back.hitTestPoint(player.x + downBumpPoint.x, player.y + downBumpPoint.y, true)) { 
     trace("downBumping"); 
     downBumping = true; 
    } else { 
     downBumping = false; 
    } 
      if (back.hitTestPoint(player.x + lowerleftBumpPoint.x, player.y + lowerleftBumpPoint.y, true)) { 
      trace("lowerrightBumping"); 
      lowerleftBumping = true; 
     } else { 
      lowerleftBumping = false; 
     } 
     if (back.hitTestPoint(player.x + lowerrightBumpPoint.x, player.y + lowerrightBumpPoint.y, true)) { 
      trace("lowerrightBumping"); 
      lowerrightBumping = true; 
     } else { 
      lowerrightBumping = false; 
     } 
    if (leftPressed) { 
     xSpeed -= speedConstant; 

    } else if (rightPressed) { 
     xSpeed += speedConstant; 

    } 
    if (leftBumping) { 
     if (xSpeed < 0) { 
      xSpeed *= -0.5; 
     } 
    } 

    if (rightBumping) { 
     if (xSpeed > 0) { 
      xSpeed *= -0.5; 
     } 
    } 

    if (upBumping) { 
     if (ySpeed < 0) { 
      ySpeed *= -0.5; 
     } 
    } 

    if (downBumping) { 
     if (ySpeed > 0) { 
      ySpeed = 0; //set the y speed to zero 
     } 
     if (upPressed) { 
      ySpeed = jumpConstant; 
     } 
    } else { 
     ySpeed += gravityConstant; 
    } 
    if (xSpeed > maxSpeedConstant) { //moving right 
     xSpeed = maxSpeedConstant; 
    } else if (xSpeed < (maxSpeedConstant * -1)) { //moving left 
     xSpeed = (maxSpeedConstant * -1); 
    } 
    xSpeed *= frictionConstant; 
    ySpeed *= frictionConstant; 
    if (Math.abs(xSpeed) < 0.5) { 
     xSpeed = 0; 
    } 

    scrollX -= xSpeed; 
    scrollY -= ySpeed; 

    back.x = scrollX; 
    back.y = scrollY; 
    if (scrollY < -770) { 
     scrollX = -4; 
     scrollY = -68; 
     ySpeed=0 
     xSpeed=0 
    } 
} 
+0

Cela n'a aucun sens. Vous devriez exprimer votre problème exact et montrer le morceau de code qui cause le problème. – HITMAN

+0

Il existe des tutoriels en ligne (oui, il ya beaucoup) comment faire des jeux de plateforme, même des didacticiels étape par étape, vous devriez avoir commencé avec ceux en premier lieu. Si Box2D, qui est là pour rendre les choses plus faciles et pour envelopper la partie déroutante de la collision et de la cinématique inverse, vous tracasse, vous attendez-vous vraiment à en sortir avec une solution plus simple et plus simple en ne l'utilisant pas? – Organis

Répondre

1

Si je a été forcé de ne pas utiliser l'amour de ma vie (Box2D) alors je suppose que je jouerais avec hitTestObject et faire des calculs sur l'angle de l'une de mes pentes pour générer la vitesse à laquelle ils se déplaceraient pour commencer. peu large et je pense que la communauté ici est plus fo r des problèmes spécifiques et non un brainstorming d'architecture.

+0

Salut, je comprends parfaitement ce que vous dites ici, ma question est un peu large, et je sais qu'ils ne fonctionnent pas bien ici. J'aimerais utiliser Box2D, mais il n'y a rien que je puisse trouver sur Internet qui semble expliquer comment l'utiliser quand votre jeu n'est pas contenu dans une classe. C'est plutôt irritant, parce que je continue d'avoir des projets obstrués par ce problème. Cependant, si vous seriez disposé à m'expliquer/me guider à travers cela, alors je serais très reconnaissant. Merci –

+0

Le code de trame n'est pas efficace. Je vous conseille sérieusement de sortir de votre conception comme cela car la construction de grandes applications en utilisant cette méthode vous fera passer beaucoup plus de temps que sur un projet normal avec des classes. Ce n'est vraiment pas si difficile et l'apprentissage qui va vous ouvrir à beaucoup plus dans Flash/AIR ... La meilleure façon de le mettre est si vous deviez avoir seulement 1 cadre et mettre tout votre code là-bas sans enfants avoir n'importe quel code d'image et construire comme ça..mais c'est une pratique horrible et vous devriez * sérieusement * considérer l'autre sens à la place. – quantomworks

+0

Eh bien, encore une fois, je n'ai aucune idée de comment faire cela, parce que c'est juste 100% de ma connaissance ... Comme, j'ai déjà utilisé des cours, mais ceux-ci étaient difficiles, et j'ai rencontré des dizaines de problèmes. pour importer beaucoup de choses ... Je vais essayer cependant. Si je le fais fonctionner, puis-je compter sur les conseils de Box2D de votre part? –