教我通过class获取变量
Teach me to get the variable through the class
感谢您看到我的 post。我正在制作游戏。我在敌人 class 工作。如果距离足够近,我希望敌人跟随玩家。我这里有问题。我无法获得 playerx 和 playery。这是我的 class:
Main.as
package
{
import flash.display.Stage;
import flash.display.MovieClip;
import flash.events.Event;
public class Main extends MovieClip
{
public var player:Player;
public function Main():void
{
player = new Player
player.x=400;
player.y=300;
stage.addChild(player);
}
}
}
enemy.as
package {
import flash.display.MovieClip;
import flash.events.Event;
public class enemy extends MovieClip {
public var enemyhp:Number=100;
public function enemy() {
// constructor code
addEventListener(Event.ENTER_FRAME, enemyLoop);
}
function enemyLoop(e:Event):void
{
trace(Player.playerx);
trace(Player.playery);
}
}
}
Player.as
package {
import flash.display.MovieClip;
import flash.events.Event;
public class Player extends MovieClip {
public var playerx:Number;
public var playery:Number;
public function Player() {
// constructor code
addEventListener(Event.ENTER_FRAME, returnxy);
}
function returnxy(e:Event):void
{
playerx=x;
playery=y;
}
}
}
这是我的错误:
D:\Testtestest\enemy.as,第 18 行 1119:通过静态类型 Class 的引用访问可能未定义的 属性 playerx。
D:\Testtestest\enemy.as,第 19 行 1119:通过静态类型 Class.
的引用访问可能未定义的 属性 playery
抱歉,我的英语不好。我是越南人,我是 coding.I 的新人,想像专业人士一样用 Class 编码。非常感谢你。 <3
您正在尝试使用播放器的 playerx
和 playery
属性,就像它们是静态属性一样(也就是说,属于 class,而不是实例)。您需要获得对播放器实例的引用,或将属性设为静态。
实现此目的的方法很少,这是一种快速但不一定最干净的方法:
在您的播放器 class 中,创建一个静态变量来存储您的播放器的单例实例:
public static var me:Player;
然后在播放器class的构造函数中(即名为Player
的方法),将this
分配给me
var:
me = this;
现在您有一个对播放器实例的静态引用,您可以通过执行 Player.me
在应用程序的任何位置访问它的 public 属性和方法,例如 Player.me.x
它的作用是,只要您创建一个新的 Player 实例,它就会将该实例分配给 Player class 的 me
变量。大概您在任何给定时间只有一个 Player 实例。
现在,应谨慎使用静态方法和变量,因为它们会在应用程序的整个生命周期中持续存在。一些开发人员努力尽可能少地使用静态(或仅用于常量和设置),我通常会同意他们的看法,也就是说,只要您自己清理一下,将一些静态属性放在显示对象上并没有那么糟糕适当地。 (例如,null
me
参考,如果您不再需要内存中的播放器)
当然,还有许多其他方法可以获取您的 Player 实例,例如 MovieClip(root).player
(不喜欢该语法但它有效)或使用 ( new Enemy(player)
) 或者有一个 class 来管理所有的敌人和玩家。如果您有时间,我会四处寻找一些游戏编程模式的最佳实践。
感谢您看到我的 post。我正在制作游戏。我在敌人 class 工作。如果距离足够近,我希望敌人跟随玩家。我这里有问题。我无法获得 playerx 和 playery。这是我的 class: Main.as
package
{
import flash.display.Stage;
import flash.display.MovieClip;
import flash.events.Event;
public class Main extends MovieClip
{
public var player:Player;
public function Main():void
{
player = new Player
player.x=400;
player.y=300;
stage.addChild(player);
}
}
}
enemy.as
package {
import flash.display.MovieClip;
import flash.events.Event;
public class enemy extends MovieClip {
public var enemyhp:Number=100;
public function enemy() {
// constructor code
addEventListener(Event.ENTER_FRAME, enemyLoop);
}
function enemyLoop(e:Event):void
{
trace(Player.playerx);
trace(Player.playery);
}
}
}
Player.as
package {
import flash.display.MovieClip;
import flash.events.Event;
public class Player extends MovieClip {
public var playerx:Number;
public var playery:Number;
public function Player() {
// constructor code
addEventListener(Event.ENTER_FRAME, returnxy);
}
function returnxy(e:Event):void
{
playerx=x;
playery=y;
}
}
}
这是我的错误: D:\Testtestest\enemy.as,第 18 行 1119:通过静态类型 Class 的引用访问可能未定义的 属性 playerx。 D:\Testtestest\enemy.as,第 19 行 1119:通过静态类型 Class.
的引用访问可能未定义的 属性 playery抱歉,我的英语不好。我是越南人,我是 coding.I 的新人,想像专业人士一样用 Class 编码。非常感谢你。 <3
您正在尝试使用播放器的 playerx
和 playery
属性,就像它们是静态属性一样(也就是说,属于 class,而不是实例)。您需要获得对播放器实例的引用,或将属性设为静态。
实现此目的的方法很少,这是一种快速但不一定最干净的方法:
在您的播放器 class 中,创建一个静态变量来存储您的播放器的单例实例:
public static var me:Player;
然后在播放器class的构造函数中(即名为Player
的方法),将this
分配给me
var:
me = this;
现在您有一个对播放器实例的静态引用,您可以通过执行 Player.me
在应用程序的任何位置访问它的 public 属性和方法,例如 Player.me.x
它的作用是,只要您创建一个新的 Player 实例,它就会将该实例分配给 Player class 的 me
变量。大概您在任何给定时间只有一个 Player 实例。
现在,应谨慎使用静态方法和变量,因为它们会在应用程序的整个生命周期中持续存在。一些开发人员努力尽可能少地使用静态(或仅用于常量和设置),我通常会同意他们的看法,也就是说,只要您自己清理一下,将一些静态属性放在显示对象上并没有那么糟糕适当地。 (例如,null
me
参考,如果您不再需要内存中的播放器)
当然,还有许多其他方法可以获取您的 Player 实例,例如 MovieClip(root).player
(不喜欢该语法但它有效)或使用 ( new Enemy(player)
) 或者有一个 class 来管理所有的敌人和玩家。如果您有时间,我会四处寻找一些游戏编程模式的最佳实践。