错误 #1034:类型强制失败:无法将 objects::Player@a1a4101 转换为 flash.display.MovieClip
Error #1034: Type Coercion failed: cannot convert objects::Player@a1a4101 to flash.display.MovieClip
我最近开始为一个学校项目使用动作脚本 3 编写游戏。现在在看了一些教程后,我想将脚本与彼此结合起来以获得我想要的游戏。
现在出现的问题是movieclip需要转换,而flash不能。为什么必须转换它:我不知道。正如我之前所说,我是一个绝对的初学者。
我也在网上和这个网站上搜索过,但似乎没有什么相同之处,所以我不知道如何解决。
Flash Builder 出现以下错误:
TypeError: Error #1034: Type Coercion failed: cannot convert objects::Player@a1d2101 to flash.display.MovieClip.
at screens::inGame/checkStuff()[C:\Users\Henk-Jan\Dropbox\Project P2 CMD 1. Multimedia production\Tutorials\StarlingProject\src\screens\inGame.as:294]
inGame.as 第 294 行:
for(var i:int = 0; i < blocks.length; i++)
{
blocks[i].checkObj(char, i); //LINE 294*************************
for(var s:int = 0; s < enemies.length; s++)
blocks[i].checkObj(enemies[s], i);
}
Block.as 中的 checkObj 函数:
public function checkObj(obj:MovieClip, place:int):void{
if(obj.x + obj.width / 2 > x - width / 2 && obj.x < x - width / 2 + 7 && Math.abs(obj.y - y) < height /2){
obj.x = x - width / 2 - obj.width / 2;
}
if(obj.x - obj.width / 2 < x + width / 2 && obj.x > x + width / 2 - 7 && Math.abs(obj.y - y) < height /2){
obj.x = x + width / 2 + obj.width / 2;
}
if(Math.abs(obj.x - x) < width / 2 + obj.width / 2 && obj.y < y - height / 2 && obj.floor > y - height / 2 && obj.onBlock != place){
obj.floor = y - height / 2;
obj.onBlock = place;
}
if(Math.abs(obj.x - x) >= width / 2 + obj.width / 2 && obj.onBlock == place){
obj.onBlock = -1;
obj.floor = 600;
}
if(obj.y - obj.height / 2 < y + height / 2 && obj.y > y && Math.abs(obj.x - x) < width / 2 + obj.width / 2){
obj.y = y + height / 2 + obj.height / 2;
}
因此,这是在 Starling 框架中构建的。上面的代码是我不会在这里 post 的更大代码的一部分,因为你们可能不喜欢那样。 var blocks 是一个数组,其中包含游戏中字符所在的块。
对于愿意将整个代码导入 flash builder 的人 > http://www75.zippyshare.com/v/37202056/file.html
我希望我的问题能很快得到解决,因为我的截止日期已经是下周了...
此致,
Henk-Jan
问题不在于您需要转换动画片段,问题在于您试图将 Player
class 强制转换为 MovieClip
class (事实并非如此)。 checkObj()
的第一个参数是 obj:MovieClip
。这就是问题所在。将其更改为 obj:Player
或使用通配符 obj:*
.
进行概括
我最近开始为一个学校项目使用动作脚本 3 编写游戏。现在在看了一些教程后,我想将脚本与彼此结合起来以获得我想要的游戏。
现在出现的问题是movieclip需要转换,而flash不能。为什么必须转换它:我不知道。正如我之前所说,我是一个绝对的初学者。
我也在网上和这个网站上搜索过,但似乎没有什么相同之处,所以我不知道如何解决。
Flash Builder 出现以下错误:
TypeError: Error #1034: Type Coercion failed: cannot convert objects::Player@a1d2101 to flash.display.MovieClip.
at screens::inGame/checkStuff()[C:\Users\Henk-Jan\Dropbox\Project P2 CMD 1. Multimedia production\Tutorials\StarlingProject\src\screens\inGame.as:294]
inGame.as 第 294 行:
for(var i:int = 0; i < blocks.length; i++)
{
blocks[i].checkObj(char, i); //LINE 294*************************
for(var s:int = 0; s < enemies.length; s++)
blocks[i].checkObj(enemies[s], i);
}
Block.as 中的 checkObj 函数:
public function checkObj(obj:MovieClip, place:int):void{
if(obj.x + obj.width / 2 > x - width / 2 && obj.x < x - width / 2 + 7 && Math.abs(obj.y - y) < height /2){
obj.x = x - width / 2 - obj.width / 2;
}
if(obj.x - obj.width / 2 < x + width / 2 && obj.x > x + width / 2 - 7 && Math.abs(obj.y - y) < height /2){
obj.x = x + width / 2 + obj.width / 2;
}
if(Math.abs(obj.x - x) < width / 2 + obj.width / 2 && obj.y < y - height / 2 && obj.floor > y - height / 2 && obj.onBlock != place){
obj.floor = y - height / 2;
obj.onBlock = place;
}
if(Math.abs(obj.x - x) >= width / 2 + obj.width / 2 && obj.onBlock == place){
obj.onBlock = -1;
obj.floor = 600;
}
if(obj.y - obj.height / 2 < y + height / 2 && obj.y > y && Math.abs(obj.x - x) < width / 2 + obj.width / 2){
obj.y = y + height / 2 + obj.height / 2;
}
因此,这是在 Starling 框架中构建的。上面的代码是我不会在这里 post 的更大代码的一部分,因为你们可能不喜欢那样。 var blocks 是一个数组,其中包含游戏中字符所在的块。
对于愿意将整个代码导入 flash builder 的人 > http://www75.zippyshare.com/v/37202056/file.html
我希望我的问题能很快得到解决,因为我的截止日期已经是下周了...
此致,
Henk-Jan
问题不在于您需要转换动画片段,问题在于您试图将 Player
class 强制转换为 MovieClip
class (事实并非如此)。 checkObj()
的第一个参数是 obj:MovieClip
。这就是问题所在。将其更改为 obj:Player
或使用通配符 obj:*
.