私は少し興味があるだけでなく、少し混乱しています。私のluaコードでは、最初からそのように新しいオブジェクトを設定しています。
enemy = {};
enemy.__index = enemy;
function enemy.new(args)
Obj = {};
setmetatable(Obj,enemy);
Obj.name = "bullet";
Obj.x = args.x;
Obj.y = args.y;
Obj.spriteTexFile= "Invader.png";
Obj.sprite = display.newImage( Obj.spriteTexFile);
Obj.sprite:setReferencePoint ( display.TopLeftReferencePoint );
Obj.sprite.x = Obj.x;
Obj.sprite.y = Obj.y;
Obj.sprite.alpha = 0;
Obj.health = 100;
Obj.activeBul = false;
Obj.bullet = Bullet.new({x=Obj.sprite.x,y=Obj.sprite.y});
return Obj;
end
...
return enemy;
end
したがって、新しい Enemy obj をインスタンス化するときは、上記の新しい関数を呼び出します。今、同じファイルに、敵オブジェクトの関数があります。たとえば、敵が作成されたときに作成された弾丸オブジェクトである「self.bullet」にアクセスできる次の関数があります。また、この Bullet インスタントで関数 trajectBullet を呼び出すこともできます。
function enemy:shoot()
local Bullet = require "Bullet";
local DEFAULTTIME = 5;--Movement time per space
self.bullet:trajectBullet({x=self.sprite.x,y=display.contentHeight, time =
DEFAULTTIME*display.contentHeight-self.sprite.y)});
end
私の質問には、次のような呼び出しが付いています。この場合、Bullet のプロパティ、所有者プロパティを設定しようとすると、nil エラーが発生し、変更できません。誰かがキーとプロパティへのアクセスが実際にどのように機能するかを少し理解するのを手伝ってくれれば、それは私を大いに助けるでしょう.
function enemy:setBulletOwner()
self.bullet.owner = self;
end
アップデート:
bullet = {};
bullet.__index = bullet;
function bullet.new(arg)
local Obj = {};
setmetatable ( Obj, bullet );
Obj.sprite = display.newRect( 0, 0, 3, 7 );
Obj.sprite.x = arg.x;
Obj.sprite.y = arg.y;
Obj.sprite:setFillColor ( 255, 255, 255 );
Obj.sprite:setReferencePoint ( display.TopLeftReferencePoint );
Obj.owner = nil;
return Obj;
end
function bullet:trajectBullet(arg)
self.sprite.tween = transition.to(self.sprite,{ tansistion = easing.outExpo, y = arg.y, x=arg.x,time= arg.time,onComplete = function() bullet:cancelTween(self.sprite);
self.owner.sprite:dispatchEvent( {name = "canShootAgain"} ); end});
end
Obj.owner は以下の関数から設定する必要があることに注意してください。
function enemy:setBulletOwner()
print("BULLET MADE");
self.bullet.owner = self;
end