MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Mettre le joueur à l'envers

    Planifier Épinglé Verrouillé Déplacé Résolu 1.11.x
    1.11.x
    13 Messages 4 Publieurs 1.9k Vues 1 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • LeBossMax2L Hors-ligne
      LeBossMax2
      dernière édition par

      On autre problème est que tu utilise mal GL11.glRotated (D’ailleurs, tu devrais utiliser GLStateManager à mon avis) Le premies paramètre est bien l’angle, mais les trois suivant permettent de choisir l’axe de rotation. (Tu met 1, 0, 0 pour une rotation en x; 0, 1, 0 pour le faire en y ou 0, 0, 1 pour z)

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002R Hors-ligne
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs
        dernière édition par

        Salut,
        Je ne pense pas qu’il soit utile de créer une classe RenderEntityPlayer.

        Les deux event RenderPlayerEvent.Pre et .RenderPlayerEvent.Post devrait être suffisant :

           @SubscribeEvent
           public void onPreRenderPlayer(RenderPlayerEvent.Pre event)
           {
               // on ouvre une matrice (pour être sur que la rotation va s'appliquer que à ce contexte)
               GlStateManager.pushMatrix();
               // on effectue la rotation
               GlStateManager.rotate(180, 0, 1, 0);
               // pas de cancel, le rendu normal du joueur sera exécuté
           }
        
           @SubscribeEvent
           public void onPostRenderPlayer(RenderPlayerEvent.Post event)
           {
               // une fois le rendu fini, on oublie pas de fermer la matrice, sinon ça va faire pleins d'erreur opengl (et des bug de rendu)
               GlStateManager.popMatrix();
           }
        
        1 réponse Dernière réponse Répondre Citer 1
        • DeletedD Hors-ligne
          Deleted
          dernière édition par

          Tout simplement robin xD

          1 réponse Dernière réponse Répondre Citer 0
          • N Hors-ligne
            Néorio
            dernière édition par

            Merci pour vos réponses déjà.

            Salut, as-tu bien enregistré l’event ? Est-il appelé correctement, un println s’affiche-t-il bien ?

            Justement je viens de me rendre compte qu’il ne passe pas dans ma fonction qui est censé retourner le joueur.

            Je ne suis pas sûr, mais crois-tu que le entityYaw - 90.0F, du super.doRender, soit réellement indispensable ?

            C’était pour faire des tests mais je ne pense pas qu’il soit effectivement indispensable.

            On autre problème est que tu utilise mal GL11.glRotated (D’ailleurs, tu devrais utiliser GLStateManager à mon avis) Le premies paramètre est bien l’angle, mais les trois suivant permettent de choisir l’axe de rotation. (Tu met 1, 0, 0 pour une rotation en x; 0, 1, 0 pour le faire en y ou 0, 0, 1 pour z)

            Merci pour la remarque, je ne savais pas, je vais en tenir compte.

            Salut,
            Je ne pense pas qu’il soit utile de créer une classe RenderEntityPlayer.

            Les deux event RenderPlayerEvent.Pre et .RenderPlayerEvent.Post devrait être suffisant :
            Code Java : (Tout sélectionner)

               @SubscribeEvent
               public void onPreRenderPlayer(RenderPlayerEvent.Pre event)
               {
                   // on ouvre une matrice (pour être sur que la rotation va s'appliquer que à ce contexte)
                   GlStateManager.pushMatrix();
                   // on effectue la rotation
                   GlStateManager.rotate(180, 0, 1, 0);
                   // pas de cancel, le rendu normal du joueur sera exécuté
               }
            
               @SubscribeEvent
               public void onPostRenderPlayer(RenderPlayerEvent.Post event)
               {
                   // une fois le rendu fini, on oublie pas de fermer la matrice, sinon ça va faire pleins d'erreur opengl (et des bug de rendu)
                   GlStateManager.popMatrix();
               }
            

            J’ai essayé ton idée Robin mais je ne vois aucune différence car du au fait comme dit plutôt, je ne rentre pas dans ma fonction qui gère ceci.

            Voici un exemple de l’implémentation que Robin suggère (je n’utilise peut-être mal) :

            @EventHandler
            public static void preInit(FMLPreInitializationEvent Event)
            {
            ModItems.init();
            ModItems.register();
            ModBlocks.init();
            ModBlocks.register();
            ModAchievement.init();
            ModAchievement.registerAchievements();
            }
            
            @SubscribeEvent
            public void onPreRenderPlayer(RenderPlayerEvent.Pre event) {
            GlStateManager.pushMatrix();
            System.out.println("Coordonnées du joueur: "+event.getEntityPlayer().getPosition());
            GlStateManager.rotate(180, 0, 1,0);
            }
            
            @SubscribeEvent
            public void onPostRenderPlayer(RenderPlayerEvent.Post event) {
            GlStateManager.popMatrix();
            }
            
            @EventHandler
            public static void Init(FMLInitializationEvent Event)
            {
            proxy.init();
            ModCrafting.register();
            }
            @EventHandler
            public static void postInit(FMLPostInitializationEvent Event)
            {
            
            }
            
            
            1 réponse Dernière réponse Répondre Citer 0
            • DeletedD Hors-ligne
              Deleted
              dernière édition par

              Enregistres-tu bien ton event avec MinecraftForge.EVENT_BUS.register ?

              1 réponse Dernière réponse Répondre Citer 0
              • robin4002R Hors-ligne
                robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                dernière édition par

                Visiblement non, le problème semble venir de là.

                1 réponse Dernière réponse Répondre Citer 0
                • N Hors-ligne
                  Néorio
                  dernière édition par

                  Désolé pour cette absence de réponse.

                  Enregistres-tu bien ton event avec MinecraftForge.EVENT_BUS.register ?

                  Effectivement mon problème qui était que je ne passais pas dans ma méthode est résolue car je n’enregistrais pas mon event mais maintenant je fais une boucle dessus à l’infini sans voir de changement pour le joueur.

                  1 réponse Dernière réponse Répondre Citer 0
                  • robin4002R Hors-ligne
                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                    dernière édition par

                    L’event est bien appelé maintenant ?

                    1 réponse Dernière réponse Répondre Citer 0
                    • N Hors-ligne
                      Néorio
                      dernière édition par

                      L’event est bien appelé maintenant ?

                      Oui l’event est bien appelé mais rien ne se passe pour le joueur et je ne sais pas si c’est normal que je passe en permanence dedans (j’ai toujours le contrôle de mon perso)

                      1 réponse Dernière réponse Répondre Citer 0
                      • robin4002R Hors-ligne
                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                        dernière édition par

                        La fonction est appelé à chaque frame de ton jeu, donc oui ça devrait bien spamer la console.
                        Donc la façon de faire que j’ai proposé ne fonctionne pas, faut tenter autre chose.

                        EDIT :
                        en fait si c’est bon, c’est juste l’axe de rotation qui n’était pas le bon.
                        Il faut également appliquer une translation de -2 en y, sinon le joueur est dans le sol.

                            @SubscribeEvent
                            public void onPreRenderPlayer(RenderPlayerEvent.Pre event)
                            {
                                // on ouvre une matrice (pour être sur que la rotation va s'appliquer que à ce contexte)
                                GlStateManager.pushMatrix();
                                // on effectue la rotation
                                GlStateManager.rotate(180, 1, 0, 0);
                                GlStateManager.translate(0, -2, 0);
                                // pas de cancel, le rendu normal du joueur sera exécuté
                            }
                        
                            @SubscribeEvent
                            public void onPostRenderPlayer(RenderPlayerEvent.Post event)
                            {
                                // une fois le rendu fini, on oublie pas de fermer la matrice, sinon ça va faire pleins d'erreur opengl (et des bug de rendu)
                                GlStateManager.popMatrix();
                            }
                        
                        1 réponse Dernière réponse Répondre Citer 0
                        • N Hors-ligne
                          Néorio
                          dernière édition par

                          Merci ça fonctionne.

                          Je vous remercie d’avoir aidé un boulet comme moi

                          1 réponse Dernière réponse Répondre Citer 0
                          • 1 / 1
                          • Premier message
                            Dernier message
                          Design by Woryk
                          ContactMentions Légales

                          MINECRAFT FORGE FRANCE © 2024

                          Powered by NodeBB