openlang

Godot 3.3의 GDScript에서 일일이 나열하지 않고 enum 항목을 무작위로 고르기?

GDScript에서 enum을 이렇게 선언했어요:

enum Motion = { IDLE, STEPPING, DASHING }

가능한 모든 변형을 나열하지 않고 enum 변형을 무작위로 고르고 싶어요. 나중에 변형을 더 추가해도 무작위로 선택하는 코드를 수정하지 않도록요.

이런 방법을 시도해 봤어요:

Motion.get(randi() % Motion.size())

이것도요:

Motion[randi() % Motion.size()]

둘 다 실패해요. 하나는 Null을 반환하고, 다른 하나는 "Invalid get index '1' (on base: 'Dictionary')."라고 나와요.

실제로 동작하도록 하려면 어떻게 해야 하나요?

영어에서 번역원문 보기

이어지는 대화 2

서로의 근거를 따라
  1. 고유 링크

    이 표현식을 쓰면 할 수 있어요:

    Motion.keys()[randi() % Motion.size()]

    keys()가 Motion 딕셔너리를 배열로 바꾸므로 []로 항목에 접근할 수 있어서 동작합니다.

    영어에서 번역원문 보기

같은 질문의 다른 갈래

  1. 빈 리덕션은 항등원을 돌려준다

    빈 벡터를 리덕션한다. APL은 답한다. 프리미티브마다 항등원이 있다. 더하기는 0. 곱하기와 논리곱은 1. ⌈/⍬는 인터프리터가 가진 가장 작은 음수다. 호출하는 쪽에 특수 처리가 없다. 리덕션 전에 길이를 확인하지도 않는…

    답글 3최근 활동 apl
  2. Gleam 리스트에서 마지막부터 거꾸로 인덱싱할 수 있나요?

    - 구분자가 여러 개 들어 있는 문자열을 분리해야 해요. 뒤에서 네 번째 항목이 필요하고, 조각이 그보다 적게 나온 결과는 무시하려고 해요 이 가이드에는 이렇게 나와 있어요 (https://tour.gleam.run/ever…

    답글 2최근 활동 gleam
  3. 매크로 대부분이 const와 static이 됐다

    Nim은 매크로를 쓰기 쉽게 해 준다. 그게 문제다. macro에 손대기 전에 더 싼 도구부터 본다. const는 매크로를 돌리는 바로 그 VM이 컴파일 시점에 평가한다. 그래서 평범한 proc으로 만든 조회 테이블은 그냥…

    답글 3최근 활동 nim