2016-11-30 1 views
-2

Je pourrais être stupide ou quelque chose. Mais, j'ai du mal avec ça. Je trouve habituellement des exemples de code, mais cela me rend confus. Malheureusement, il n'y a pas de bon tutoriel pour cela. J'utilise Lua depuis presque un an donc j'ai un peu d'expérience. L'aide serait extrêmement appréciable! Fondamentalement, je veux apprendre à faire sauter le rectangle puis redescendre.Faire un saut de rectangle? (Love2d)

+0

Que voulez-vous dire par faire un saut de rectangle? avec la physique et tout ça? accélération, gravité et tout ça? juste en haut ou dans n'importe quelle direction? Fournissez un croquis ou plus d'informations sur ce que vous voulez réaliser. vous passez 3 lignes pour expliquer ce que vous ne pouvez pas trouver mais pas une seule ligne sur ce que vous voulez vraiment savoir ... – Piglet

+0

Mes excuses. Fondamentalement, je veux apprendre à faire un rectangle sauter puis redescendre. Littéralement juste un simple saut. – Probix

+0

et qu'est-ce qui vous empêche de lire le manuel? https://love2d.org/wiki/Tutorial:Baseline_2D_Platformer#Part_4:_Jumping – Piglet

Répondre

1

Pour un seul bloc que vous contrôlez, vous devez essentiellement stocker sa gravité et lui faire une belle accélération. Ensuite, dans la boucle, vous devez vérifier s'il est au sol en utilisant une détection de collision. Vous voulez ajouter l'accélération de la pesanteur à currentGravity:

currentGravity = currentGravity + gravity 

Ensuite, vous ajoutez à l'axe courant y du bloc:

YAxis = YAxis + currentGravity 

Une fois que vous atterrissez, assurez-vous de mettre la gravité à 0. Assurez-vous aussi de garder la valeur 0 pour vous assurer de ne pas tomber dans le sol (comme vous avez continué d'ajouter à la gravité, peu importe quoi.)

if not inAir() then 
    currentGravity = 0 
end 

Et, bien sûr, de sauter, mettre currentGravity à un engourdissement négatif er (comme 20) (. si c'est comment vous avez fait le travail de gravité)

est ici une fonction de détection de collision j'ai fait pour Love2D:

function checkCollision(Pos1,Size1,Pos2,Size2) 

    local W1,H1,W2,H2 = Size1[1]/2,Size1[2]/2,Size2[1]/2,Size2[2]/2 

    local Center1,Center2 = {Pos1[1]+W1,Pos1[2]+H1},{Pos2[1]+W2,Pos2[2]+H2} 

    local c1 = Center1[1]+(W1) > Center2[1]-W2 
    local c2 = Center1[1]-(W1) < Center2[1]+W2 
    local c3 = Center1[2]+(H1) > Center2[2]-H2 
    local c4 = Center1[2]-(H1) < Center2[2]+H2 

    if (c1 and c2) and (c3 and c4) then 
     return true 
    end 
    return false 
end 

Il prend la position que vous avez donné est le centre du bloc . Si la boîte est tournée, cela ne fonctionnera pas. Vous devrez trouver comment le faire fonctionner avec des murs et autres. Et oui, c'est moche parce que c'est très vieux. : p