La fonction incontournable du jeu de magie hardcore de Scratch : les dégâts modulaires

Apprêt

        Dans certains jeux, si vous frappez un ennemi, il sautera des dégâts internes de la voiture de l'ennemi

        Ce mécanisme de dégâts rend la "barre de sang" cachée dans un endroit plus profond qui n'est pas facile à découvrir par les joueurs. Il améliore également la jouabilité et l'authenticité du jeu, impose des exigences plus élevées pour la précision des opérations du joueur et ajoute beaucoup de magie scène


Pouvons-nous obtenir cet effet dans Scratch ?

Explication détaillée

        Prenons un char comme exemple, sa structure principale interne a probablement : moteur, râtelier à munitions, membre, bloc de culasse (et plus)

Commencer par le principe de jugement

        D'une manière générale, quand on pense à une pure collision de données, on pense à calculer la distance entre deux points pour construire une boîte de collision circulaire :

image.png"

        Bien sûr, vous pouvez également mettre les deux côtés au carré en même temps, puis comparer le carré de la distance, éliminant ainsi le besoin de l'opération racine carrée.

        Si la distance de Manhattan est utilisée, une boîte de collision carrée avec une longueur diagonale de 2d et une rotation de 45 degrés par rapport à l'axe x sera formée.

image.png"

        Cela évite la multiplication

        Ensuite, si nous suivons cette ligne de pensée, nous pouvons créer une liste pour stocker les coordonnées xy de chaque composant par rapport à la carrosserie de la voiture

        À ce moment, lorsque l'obus frappe la carrosserie de la voiture, le calcul des dommages est effectué et le flux de code est à peu près le suivant :

"

Répétez (étapes de mouvement de boulet de canon) fois {

] parcourent la liste des modules, chaque élément est défini sur a[n]{

]] Déterminer si l'obus touche un[n]

]} déplacer (étape)

}

''

Évidemment, la complexité temporelle         de cette méthode est O(n²) , ce qui n'est pas assez rapide

        Alors, quelle est la meilleure façon ?

        Allons droit au but!


méthode de la grille

        La puissance de calcul de Scratch est limitée, nous pouvons abstraire et brouiller la structure interne du réservoir dans une grille, et chaque grille est remplie d'un module

Par exemple:

Corps:

armure armure armure
piste conducteur piste
piste porte-munitions piste
piste moteur piste
 
piste moteur piste

tourelle:

armure bloc de culasse armure
Longueur de la voiture bloc de culasse canonnier
porte-munitions bloc de culasse porte-munitions

De cette façon, nous pouvons effectuer des calculs simples sur les coordonnées de la coque par rapport à la carrosserie de la voiture pour calculer dans quelle grille elle se trouve

(Le code spécifique peut être exploré par vous-même)

Ensuite, le code de calcul des dommages à ce moment est le suivant :

'''

Répétez (étapes de mouvement de boulet de canon) fois {
] Calculer la grille où se trouve la coque
] Module pour juger du coup d'obus
] déplacer (taille du pas)
}

'''

        Bien sûr, cette méthode nécessite une taille de pas appropriée (généralement approximativement égale à la longueur du côté de la grille)

        Évidemment, la complexité temporelle de cette méthode est O(n), et l'augmentation du nombre total de grilles a peu d'effet sur la vitesse d'exécution du code.

        Ensuite, le problème de la méthode de détermination a été résolu, et le problème suivant est de savoir comment convertir les coordonnées absolues des coques en coordonnées relatives à la carrosserie du véhicule

        Il peut être résolu avec la formule de l'axe de rotation :

image.png"

        (Notez que θ ici est l'angle de rotation dans le sens antihoraire à partir de la direction positive de l'axe x, et la direction dans sc est l'angle de rotation dans le sens horaire à partir de la direction positive de l'axe y, c'est-à-dire la formule angle=90 direction °-sc)

        Bien sûr, si vous savez que la formule de transformation triangulaire peut être simplifiée, je ne le préciserai pas ici

        En fin de compte, il vous suffit de les combiner, d'ajouter une interface graphique pour refléter les résultats des dégâts, et vous pouvez y arriver !

Je suppose que tu aimes

Origine blog.csdn.net/leyang0910/article/details/132046229
conseillé
Classement