InscriptionConnexion
J'allais conseiller ça
Trop fort
:MillefiWag:

Bientôt je dépasse le maître
:MillefiSmug:
il y a un an
Trop fort
:MillefiWag:

Bientôt je dépasse le maître
:MillefiSmug:
ouais bon j'ai pas beaucoup d'expérience malheureusement
:sueur:
Je vous aime les kheys, prenez soins de vous
il y a un an
Les vrais font des Flappy Bird sur Visual Studio avec des images dans des picturebox pour sprites (non, c'est juste moi ça ?)
il y a un an
Merci keyou
:love:
Merci ALLAH pour ce Miracle :
GIF
il y a un an
@VisualStudio @Millefi-Hime
Je fais appel à vous par-ce que je coince sur un comportement bizarre (je m'arrache les cheveux à essayer de le corriger en vain), sur le fonctionnement de base d'un Raycast (qui est sensé être plutôt simple
:Yoruichi5:
)

Grosso-modo j'ai fais des mobs sur la carte pour déclencher les combats, puis j'ai voulu les empêcher de voir derrière un mur avec le-dît Raycast2D, sauf que celui-ci
1. Semble détecter les tiles qui ne sont pas des murs
2. Même en enlevant le collision layer de la tilemap pour test, il préfère ne rien détecter que détecter le perso
3. Ne détecte que quand je suis en bas à droite

J'ai vérifié que le raycast est bien cadré entre le mob et le perso, ce qui est le cas (carrés violets) :
Image

J'ai essayé avec la version pure (docs.godotengine.org https://docs.godotengine.[...]/physics/ray-casting.html) mais même chose
:tounsicat:


Bref j'arrive pas à comprendre le soucis là
:sad3:


EDIT : j'ai un début de piste, le collision point est en haut à gauche (ça explique pas grand chose mébon)
il y a un an
C'est bon !
:danse_kj:
:RaphielCafe:
:danse_kj:
:RaphielCafe:
:danse_kj:
:RaphielCafe:
:danse_kj:


C'est pas super bien foutu, la changement de target se fait en local, j'ai dût rajouter un to_local :
StartChase_Raycast.set_target_position(StartChase_Raycast.to_local(Target.global_position+Vector2(0.0, -8.0)))

Une fonction qui m'a bien aidé pour voir le raycast :
get_tree().set_debug_collisions_hint(true)
(je crois qu'on peut l'activer dans les options aussi mais pas trouvé)

Bon ce qui devait être l'histoire de 10 minutes s'est transformé en matiné
:sueur:


Mébon j'ai appris des choses j'imagine
:risitas_hanches:
il y a un an
0-0
0-0
1 an
C'est bon !
:danse_kj:
:RaphielCafe:
:danse_kj:
:RaphielCafe:
:danse_kj:
:RaphielCafe:
:danse_kj:


C'est pas super bien foutu, la changement de target se fait en local, j'ai dût rajouter un to_local :
StartChase_Raycast.set_target_position(StartChase_Raycast.to_local(Target.global_position+Vector2(0.0, -8.0)))

Une fonction qui m'a bien aidé pour voir le raycast :
get_tree().set_debug_collisions_hint(true)
(je crois qu'on peut l'activer dans les options aussi mais pas trouvé)

Bon ce qui devait être l'histoire de 10 minutes s'est transformé en matiné
:sueur:


Mébon j'ai appris des choses j'imagine
:risitas_hanches:
J'aurai cru que c'était une histoire de layer, mais non, et c'est tant mieux bien joué à toi
:oui:
Je vous aime les kheys, prenez soins de vous
il y a un an
0-0
0-0
1 an
Unreal Engine c'est vraiment fait pour la beauté de la 3D, sinon c'est généralement pas la peine (à noter que des jeux comme Octopath Traveler ont un aspect gameplay 2D mais des très jolies décors 3D, c'est probablement fait avec Unreal)
:risibo:


Les dév' sont compétents, c'est la même boîte qui font Fortnite et Epic Games (pas forcément besoin d'aimer Fortnite mais c'est juste pour dire qu'ils ont leur terrain de jeu), y a aussi beaucoup d'assets de dispo, dont des gratuits tous les mois
:cafe:


Mais son défaut c'est que globalement c'est une usine à gaz et c'est assez dur d'y plonger
:Chat_wut:


Unity c'était la version 3D simple d'utilisation d'Unreal Engine, et pour la 2D du coup, mais les gérants sont des salops (réf: le dernier drama), à éviter aujourd'hui; y a probablement plus d'assets que Godot mais j'espère que ça sera voué à changer à mesure que les 'petits dév indé' changeront de moteur
:cafe:


Godot est tellement léger et cohérent, y a quelques bugs parfois (Unity n'en avait pas moins) mais à part ça c'est un sans faute pour ma part ! (J'ai pas testé la 3D nonobstant)
:risi8:
Etant en train de développer un jeu sur android je ne peux que confirme qu'unreal à vraiment du mal sur certaines chose
Chaque moteur à ses avantages et inconvénients, unreal c'est clairement la 3d, après tu peux très bien developer un jeu en 2d mais ça va être un peu plus technique sur certaines chose
bon courrage dans cette belle aventure que vous allez vivre
:onche:
Viens tester la beta de onchepagnon, le jeu du forum: https://onche.org/topic/887825/beta-onchepagnon
il y a un an
0-0
0-0
1 an
C'est bon !
:danse_kj:
:RaphielCafe:
:danse_kj:
:RaphielCafe:
:danse_kj:
:RaphielCafe:
:danse_kj:


C'est pas super bien foutu, la changement de target se fait en local, j'ai dût rajouter un to_local :
StartChase_Raycast.set_target_position(StartChase_Raycast.to_local(Target.global_position+Vector2(0.0, -8.0)))

Une fonction qui m'a bien aidé pour voir le raycast :
get_tree().set_debug_collisions_hint(true)
(je crois qu'on peut l'activer dans les options aussi mais pas trouvé)

Bon ce qui devait être l'histoire de 10 minutes s'est transformé en matiné
:sueur:


Mébon j'ai appris des choses j'imagine
:risitas_hanches:
J'ai pas eu le temps de me réveiller pour t'aider, navré
:MillefiReveil2:

J'ai pas encore eu besoin de Raycast mais ça viendra peut-être quand je ferai des lasers
:MillefiWTF:


Tu peux chercher la global_position d'un node, mais j'aime aussi utiliser owner.position. Le "owner" d'un node est automatiquement associé à son parent à la base (ça m'est arrivé de devoir le mettre manuellement sur des instances créées avec spawner mais rien de terrible), ce qui fait que cette position, appelée sur une Area2D du personnage, retournera la position du personnage par rapport à son parent "Monde". C'est ma façon de rester synchro avec tout ce qu'il se passe dans le monde, au cas où ça bougerait
:MillefiWink1:


Tu peux activer les options de debug pour afficher les hitbox et tutti quanti très facilement. C'est directement dans un des menus déroulants en haut à gauche, parmi les onglets "Projet", "Aide", etc. Je sais plus si ça s'appelle Debug ou autre chose, j'ai pas le pc sous les yeux
:MillefiNeutre2:
il y a un an
J'ai pas eu le temps de me réveiller pour t'aider, navré
:MillefiReveil2:

J'ai pas encore eu besoin de Raycast mais ça viendra peut-être quand je ferai des lasers
:MillefiWTF:


Tu peux chercher la global_position d'un node, mais j'aime aussi utiliser owner.position. Le "owner" d'un node est automatiquement associé à son parent à la base (ça m'est arrivé de devoir le mettre manuellement sur des instances créées avec spawner mais rien de terrible), ce qui fait que cette position, appelée sur une Area2D du personnage, retournera la position du personnage par rapport à son parent "Monde". C'est ma façon de rester synchro avec tout ce qu'il se passe dans le monde, au cas où ça bougerait
:MillefiWink1:


Tu peux activer les options de debug pour afficher les hitbox et tutti quanti très facilement. C'est directement dans un des menus déroulants en haut à gauche, parmi les onglets "Projet", "Aide", etc. Je sais plus si ça s'appelle Debug ou autre chose, j'ai pas le pc sous les yeux
:MillefiNeutre2:
Merci je penserais à owner la prochaine fois que j'aurais des problèmes de position local/global
:KJdance:


Et du coup j'ai déjà mis le debug d'hitbox dans mes inputs de debug, c'est très pratique
:wink:


J'ai mes touches configurées sur le numpad :
9 : activation du debug
+ : speed x2
- : speed /2
* : pause/unpause

Si ça t'intéresse :
var DebugActivated = false
var GamePause = false
var GameSpeed = 1.
var GameSpeed_DefaultTimeScale = Engine.time_scale
func _input(event):

# Global Inputs
if (!OS.has_feature("standalone")):
# DEBUG
if event.is_action_pressed("debug_activation_9"):
# Activate debug
DebugActivated = !DebugActivated
if (DebugActivated):
print("[Debug activation]")
get_tree().set_debug_collisions_hint(true)
else:
print("[Debug desactivation]")
get_tree().set_debug_collisions_hint(false)
elif event.is_action_pressed("debug_speed_+"):
# Speed up
GameSpeed *= 2.
print("[GameSpeed set to "+str(GameSpeed)+".]")
if (!GamePause):
Engine.time_scale = GameSpeed * GameSpeed_DefaultTimeScale
elif event.is_action_pressed("debug_speed_-"):
# Speed down
GameSpeed /= 2.
print("[GameSpeed set to "+str(GameSpeed)+".]")
if (!GamePause):
Engine.time_scale = GameSpeed * GameSpeed_DefaultTimeScale
elif event.is_action_pressed("debug_pause_*"):
# Pause
if (!GamePause):
GamePause = true
print("[Game paused]")
Engine.time_scale = 0.0
else:
GamePause = false
print("[Game unpaused]")
Engine.time_scale = GameSpeed * GameSpeed_DefaultTimeScale
il y a un an
Etant en train de développer un jeu sur android je ne peux que confirme qu'unreal à vraiment du mal sur certaines chose
Chaque moteur à ses avantages et inconvénients, unreal c'est clairement la 3d, après tu peux très bien developer un jeu en 2d mais ça va être un peu plus technique sur certaines chose
bon courrage dans cette belle aventure que vous allez vivre
:onche:
Merci khey ! Je confirme que je m'amuse beaucoup
:kj_joie:
il y a un an
0-0
0-0
1 an
Merci je penserais à owner la prochaine fois que j'aurais des problèmes de position local/global
:KJdance:


Et du coup j'ai déjà mis le debug d'hitbox dans mes inputs de debug, c'est très pratique
:wink:


J'ai mes touches configurées sur le numpad :
9 : activation du debug
+ : speed x2
- : speed /2
* : pause/unpause

Si ça t'intéresse :
var DebugActivated = false
var GamePause = false
var GameSpeed = 1.
var GameSpeed_DefaultTimeScale = Engine.time_scale
func _input(event):

# Global Inputs
if (!OS.has_feature("standalone")):
# DEBUG
if event.is_action_pressed("debug_activation_9"):
# Activate debug
DebugActivated = !DebugActivated
if (DebugActivated):
print("[Debug activation]")
get_tree().set_debug_collisions_hint(true)
else:
print("[Debug desactivation]")
get_tree().set_debug_collisions_hint(false)
elif event.is_action_pressed("debug_speed_+"):
# Speed up
GameSpeed *= 2.
print("[GameSpeed set to "+str(GameSpeed)+".]")
if (!GamePause):
Engine.time_scale = GameSpeed * GameSpeed_DefaultTimeScale
elif event.is_action_pressed("debug_speed_-"):
# Speed down
GameSpeed /= 2.
print("[GameSpeed set to "+str(GameSpeed)+".]")
if (!GamePause):
Engine.time_scale = GameSpeed * GameSpeed_DefaultTimeScale
elif event.is_action_pressed("debug_pause_*"):
# Pause
if (!GamePause):
GamePause = true
print("[Game paused]")
Engine.time_scale = 0.0
else:
GamePause = false
print("[Game unpaused]")
Engine.time_scale = GameSpeed * GameSpeed_DefaultTimeScale
Ça a l'air très abordable jusque là
:MillefiCache:

Ma façon de debug consiste surtout à utiliser les breakpoints et des prints. Je visualise rarement les hitbox vu que c'est déjà plutôt bien configuré
:MillefiMicro:


Mes touches de debug sont réservées à l'apparition de personnage, d'ennemi, au changement de sens de défilement, en attendant d'avoir les systèmes pour l'automatiser
:MillefiNeutre3:
il y a un an
@VisualStudio @Millefi-Hime
Vous connaissez une façon d'instancier une scène depuis 0 ?
:risi_celestin:


De base j'avais eu quelques problèmes avec duplicate puis-ce que les références gardaient les références du premier objet et pas les nouvelles du dupliqué, ce qui est chiant mais logique
:Kj_saute_sur_place_ce_debilus:


Mais en faite là je découvre que load(<FileName>).instantiate() c'est pareil, je suis pas sûr de tout comprendre mais on dirait que le premier instancié modifie la scène pour les prochaines instanciation (du coup j'avais des armes dans des coffres, et quand j'en équipais une ça prenais la référence de celle du coffre, et était automatiquement libéré quand le coffre disparaissait au changement de map)
:ahi:


Je me suis débrouillé pour reSet les références mais c'est pas super propre, du coup j'aimerais load une scene tel quelle est dans l'éditeur sans modification, mais j'ai pas trouvé comment
:risibo:
il y a un an
0-0
0-0
1 an
@VisualStudio @Millefi-Hime
Vous connaissez une façon d'instancier une scène depuis 0 ?
:risi_celestin:


De base j'avais eu quelques problèmes avec duplicate puis-ce que les références gardaient les références du premier objet et pas les nouvelles du dupliqué, ce qui est chiant mais logique
:Kj_saute_sur_place_ce_debilus:


Mais en faite là je découvre que load(<FileName>).instantiate() c'est pareil, je suis pas sûr de tout comprendre mais on dirait que le premier instancié modifie la scène pour les prochaines instanciation (du coup j'avais des armes dans des coffres, et quand j'en équipais une ça prenais la référence de celle du coffre, et était automatiquement libéré quand le coffre disparaissait au changement de map)
:ahi:


Je me suis débrouillé pour reSet les références mais c'est pas super propre, du coup j'aimerais load une scene tel quelle est dans l'éditeur sans modification, mais j'ai pas trouvé comment
:risibo:
J'ai pas eu ce soucis encore, pourtant j'utilise load(...).instantiate() aussi
:MillefiPense:


En toute logique, tes instances doivent avoir des variables indépendantes. Est-ce que tu as vérifié que tu ciblais bien l'ID de référence de l'instance et pas la scène elle-même?

var instance = load("res:/truc/machin.tscn").instantiate()
instance.add_child()
instance.owner = self
instance.variable = 40
etc...

Tu gardes cet ID en mémoire quelque part?

Mais à bien regarder ton soucis, tu devrais peut-être associer ça à une classe de type Ressource, pour pouvoir sauvegarder les stats de tes armes et les conserver entre plusieurs scènes
:MillefiSourire1:

C'est comme ça que je fais pour que je puisse instancier le personnage joueur n'importe quand sans qu'il n'oublie ses stats. Un Autoload se charge de conserver les données importantes et les rendre accessibles.
:MillefiMicro:
il y a un an
0-0
0-0
1 an
@VisualStudio @Millefi-Hime
Vous connaissez une façon d'instancier une scène depuis 0 ?
:risi_celestin:


De base j'avais eu quelques problèmes avec duplicate puis-ce que les références gardaient les références du premier objet et pas les nouvelles du dupliqué, ce qui est chiant mais logique
:Kj_saute_sur_place_ce_debilus:


Mais en faite là je découvre que load(<FileName>).instantiate() c'est pareil, je suis pas sûr de tout comprendre mais on dirait que le premier instancié modifie la scène pour les prochaines instanciation (du coup j'avais des armes dans des coffres, et quand j'en équipais une ça prenais la référence de celle du coffre, et était automatiquement libéré quand le coffre disparaissait au changement de map)
:ahi:


Je me suis débrouillé pour reSet les références mais c'est pas super propre, du coup j'aimerais load une scene tel quelle est dans l'éditeur sans modification, mais j'ai pas trouvé comment
:risibo:
Aussi, je ne sais pas si y a une raison particulière mais quand on fait un @export Array on ne peut pas mettre de Node, juste des Nodepath
:Risitas_wtf:
il y a un an
J'ai pas eu ce soucis encore, pourtant j'utilise load(...).instantiate() aussi
:MillefiPense:


En toute logique, tes instances doivent avoir des variables indépendantes. Est-ce que tu as vérifié que tu ciblais bien l'ID de référence de l'instance et pas la scène elle-même?

var instance = load("res:/truc/machin.tscn").instantiate()
instance.add_child()
instance.owner = self
instance.variable = 40
etc...

Tu gardes cet ID en mémoire quelque part?

Mais à bien regarder ton soucis, tu devrais peut-être associer ça à une classe de type Ressource, pour pouvoir sauvegarder les stats de tes armes et les conserver entre plusieurs scènes
:MillefiSourire1:

C'est comme ça que je fais pour que je puisse instancier le personnage joueur n'importe quand sans qu'il n'oublie ses stats. Un Autoload se charge de conserver les données importantes et les rendre accessibles.
:MillefiMicro:
Ouep je viens de revérifier à l'instant, je load bien depuis le nom de fichier
:risibo:


Je vais recheck le moment où je le crée pour vérifier si ça change à un moment donné
:Oopsi:
il y a un an
J'ai commencé à apprendre Unreal mais en lisant vos témoignages je commence à douter
:chakoi:


De base j'étais plus Unity mais j'aime pas leur mentalité de fdp
:chakoi:
Perdez pas espoir
il y a un an
J'ai pas eu ce soucis encore, pourtant j'utilise load(...).instantiate() aussi
:MillefiPense:


En toute logique, tes instances doivent avoir des variables indépendantes. Est-ce que tu as vérifié que tu ciblais bien l'ID de référence de l'instance et pas la scène elle-même?

var instance = load("res:/truc/machin.tscn").instantiate()
instance.add_child()
instance.owner = self
instance.variable = 40
etc...

Tu gardes cet ID en mémoire quelque part?

Mais à bien regarder ton soucis, tu devrais peut-être associer ça à une classe de type Ressource, pour pouvoir sauvegarder les stats de tes armes et les conserver entre plusieurs scènes
:MillefiSourire1:

C'est comme ça que je fais pour que je puisse instancier le personnage joueur n'importe quand sans qu'il n'oublie ses stats. Un Autoload se charge de conserver les données importantes et les rendre accessibles.
:MillefiMicro:
Ok j'ai recheck, et je confirme que ça reste entre 2 instances, en faite j'ai 2 trucs :
* Les armes qui sont directement ajoutés aux coffres depuis l'éditeur
* Les armes de début du jeu dans l'inventaire qui sont ajouté via instantiation() au lancement

Et à vrai dire, même à partir du 2nd coffre la référence est déjà perdu:
Image
Normalement je transforme les Nodepath en Node, quand ça le fait ça affiche dans DEBUG 1 (dans le ready),
DEBUG 0 quand ça entre dans le _ready

Donc quand je suis dans le ready la variable a déjà été changée,
je sais pas trop si c'est lié aux var @export qui seraient global (ça me paraît bizarre), aux Nodepath, ou autre
:cafe:
il y a un an
J'ai commencé à apprendre Unreal mais en lisant vos témoignages je commence à douter
:chakoi:


De base j'étais plus Unity mais j'aime pas leur mentalité de fdp
:chakoi:
Unreal c'est bien aussi si ça te correspond, même si c'est surtout bien pour la 3D
:danse_kj:
il y a un an
0-0
0-0
1 an
Ok j'ai recheck, et je confirme que ça reste entre 2 instances, en faite j'ai 2 trucs :
* Les armes qui sont directement ajoutés aux coffres depuis l'éditeur
* Les armes de début du jeu dans l'inventaire qui sont ajouté via instantiation() au lancement

Et à vrai dire, même à partir du 2nd coffre la référence est déjà perdu:
Image
Normalement je transforme les Nodepath en Node, quand ça le fait ça affiche dans DEBUG 1 (dans le ready),
DEBUG 0 quand ça entre dans le _ready

Donc quand je suis dans le ready la variable a déjà été changée,
je sais pas trop si c'est lié aux var @export qui seraient global (ça me paraît bizarre), aux Nodepath, ou autre
:cafe:
J'ai un peu de mal à savoir comment ton truc fonctionne, je saurai pas déchiffrer l'erreur sur ce coup-là
:MillefiNeutre3:

Qu'est-ce qui contient quoi? Qu'est-ce qui charge quoi, quand, et comment?
:MillefiPlop:

L'inventaire de ton personnage ou d'un coffre contient quel genre d'objet pour représenter une arme? Tu enregistres des PackedScenes dans un dictionnaire?
:MillefiNeutre2:
il y a un an