Benarkan penggunaan komposit sebagai parameter fungsi dalam struktur

WBOY
Lepaskan: 2024-02-05 22:30:03
ke hadapan
1126 orang telah melayarinya

Benarkan penggunaan komposit sebagai parameter fungsi dalam struktur

Kandungan soalan

Katakan saya membuat sesuatu seperti enjin permainan.

Saya memerlukan struct GameObject untuk menentukan beberapa pengendali acara:

type GameObject struct {
    transform        Transform
    animatedMesh     AnimatedMesh
    updateHandler    func(self GameObjectGetter)
    onCreateHandler  func(self GameObjectGetter)
    onDestroyHandler func(self GameObjectGetter)
}


func (g GameObject)getGameObject() GameObject {
    return g
 }

 type GameObjectGetter interface {
    getGameObject() GameObject
 }
Salin selepas log masuk

Kemudian apabila saya memulakan beberapa objek permainan konkrit, saya ingin menentukan pengendali sebagai fungsi tersuai:

g.updateHandler = func(self FishGameObject) {  // Error here
    self.tailMotionSpeed = self.boid.acceleration.Normalize().Len()
}
Salin selepas log masuk

Perhatikan bahawa ahli tailMotionSpeedboid 不是 GameObject 的成员。它们是 struct FishGameObject, struktur ini mempunyai beberapa sifat tersuai dan GameObject tanpa nama:

type FishGameObject struct {
    leftFinPosition  float32
    rightFinPosition float32
    tailMotionSpeed  float32
    boid             Boid
    GameObject
}
Salin selepas log masuk

Jika saya menentukan parameter sebagai GameObjectGetter, saya mendapat ralat self.tailMotionSpeed undefined(类型 GameObjectGetter 没有字段或方法 tailMotionSpeed),而且我收到错误 cannot use handler(类型为 func(self FishGameObject 的变量) )) 作为结构文字 dalam nilai func(self GameObjectGetter) (jika saya nyatakan parameter sebagai FishGameObject). apa yang saya buat?


Jawapan betul


Apa yang anda mahu lakukan tidak boleh dilakukan dalam Pergi dengan cara yang anda mahu lakukan. Walau bagaimanapun, anda boleh melakukan ini:

Takrifkan GameObject sebagai antara muka:

type GameObject interface {
   GetTransform() *Transform
   GetAnimatedMesh() *AnimatedMesh
   SetUpdateHandler(func(GameObject))
   UpdateHandler() func(GameObject)
   ...
}
Salin selepas log masuk

Anda boleh mentakrifkan BaseGameObject:

type BaseGameObject struct {
    transform        Transform
    animatedMesh     AnimatedMesh
    updateHandler    func(GameObject)
    onCreateHandler  func(GameObject)
    onDestroyHandler func(GameObject) 
}
Salin selepas log masuk

Tentukan semua kaedah supaya BaseGameObject 成为 GameObject menjadi

.

FishGameObjectKemudian, tentukan

seperti yang anda lakukan, tetapi

fish.SetUpdateHandler(func(self GameObject) {  
    fish:=self.(*FishGameObject)
     ...
   })
Salin selepas log masuk
Anda juga harus menggunakan penerima penunjuk untuk semua kaedah. 🎜

Atas ialah kandungan terperinci Benarkan penggunaan komposit sebagai parameter fungsi dalam struktur. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan