Actionscript 3 TypeError:Error#1006:value不是函数-我做错了什么?

Actionscript 3 TypeError:Error#1006:value不是函数-我做错了什么?,actionscript-3,compiler-errors,Actionscript 3,Compiler Errors,首先,通过我的搜索,我意识到这个问题已经被问过一千次了,非常抱歉,但我在解释答案时遇到了困难。我对ActionScript3非常陌生,通常只是一个新手程序员 所以我正在编写一个简单的游戏,其中一些球移动并加速。但是,每当我调用冲突检查函数(isWithin)时,它都会给出错误#1006:Value不是函数。我调用或声明函数是否有误 import flash.ui.Keyboard; import flash.events.Event; import flash.events.KeyboardEv

首先,通过我的搜索,我意识到这个问题已经被问过一千次了,非常抱歉,但我在解释答案时遇到了困难。我对ActionScript3非常陌生,通常只是一个新手程序员

所以我正在编写一个简单的游戏,其中一些球移动并加速。但是,每当我调用冲突检查函数(isWithin)时,它都会给出错误#1006:Value不是函数。我调用或声明函数是否有误

import flash.ui.Keyboard;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.text.TextField;
import flash.text.TextFormat;

// add the event listeners
PlayerBall.addEventListener(Event.ENTER_FRAME, update);
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);

// this array holds references to all the keys

var keys:Array = [];

var xSpeed1:Number = 0;
var ySpeed1:Number = 0;

var xSpeed2:Number = 0;
var ySpeed2:Number = 0;

var hasFlag:int = 0;

var collide:Boolean = false;

function isWithin(object1:Object, object2:Object, barrier:Number):Boolean
{
var distance:Number = Math.sqrt((object1.x - object2.x)(object1.x - object2.x) + (object1.y - object2.y)(object1.y - object2.y));

if(distance <= barrier)
{
    return(true);
}
else
{
    return(false);
}
}

collide = isWithin(PlayerBall, PlayerBall2, PlayerBall.width);
trace(collide);

function update(e:Event):void
{

// GETTING KEYBOARD INPUT FOR FRAME
if(keys[Keyboard.UP])
{
    ySpeed1 = ySpeed1 < -5 ? ySpeed1 : ySpeed1 - .3;
}
if(keys[Keyboard.DOWN])
{
    ySpeed1 = ySpeed1 > 5 ? ySpeed1 : ySpeed1 + .3;
}
if(!(keys[Keyboard.UP]) && !(keys[Keyboard.DOWN]))
{
    ySpeed1 = ySpeed1 > 0 ? ySpeed1 - .2 : ySpeed1 + .2;
}


if(keys[Keyboard.RIGHT])
{
    xSpeed1 = xSpeed1 > 5 ? xSpeed1 : xSpeed1 + .3;
}
if(keys[Keyboard.LEFT])
{
    xSpeed1 = xSpeed1 < -5 ? xSpeed1 : xSpeed1 - .3;
}
if(!(keys[Keyboard.RIGHT]) && !(keys[Keyboard.LEFT]))
{
    xSpeed1 = xSpeed1 > 0 ? xSpeed1 - .2 : xSpeed1 + .2;
}

if(keys[Keyboard.W])
{
    ySpeed2 = ySpeed2 < -5 ? ySpeed2 : ySpeed2 - .3;
}
if(keys[Keyboard.S])
{
    ySpeed2 = ySpeed2 > 5 ? ySpeed2 : ySpeed2 + .3;
}
if(!(keys[Keyboard.W]) && !(keys[Keyboard.S]))
{
    ySpeed2 = ySpeed2 > 0 ? ySpeed2 - .2 : ySpeed2 + .2;
}


if(keys[Keyboard.D])
{
    xSpeed2 = xSpeed2 > 5 ? xSpeed2 : xSpeed2 + .3;
}
if(keys[Keyboard.A])
{
    xSpeed2 = xSpeed2 < -5 ? xSpeed2 : xSpeed2 - .3;
}
if(!(keys[Keyboard.A]) && !(keys[Keyboard.D]))
{
    xSpeed2 = xSpeed2 > 0 ? xSpeed2 - .2 : xSpeed2 + .2;
}

// MOVEMENT

PlayerBall.x += xSpeed1;
PlayerBall.y += ySpeed1;

PlayerBall2.x += xSpeed2;
PlayerBall2.y += ySpeed2;

if(hasFlag == 1)
{
    flag.x = PlayerBall.x;
    flag.y = PlayerBall.y;
}
if(hasFlag == 2)
{
    flag.x = PlayerBall2.x;
    flag.y = PlayerBall2.y
}

// COLLISION CHECKING

collide = isWithin(PlayerBall, flag, PlayerBall.width/2 + flag.width/2);

if(flag.visible && collide)
{
    hasFlag = 1;
    flag.visible = false;

    flag.x = PlayerBall.x;
    flag.y = PlayerBall.y;
}

collide = isWithin(PlayerBall2, flag, (PlayerBall2.width/2 + flag.width/2));

if(flag.visible && collide)
{
    hasFlag = 2;
    flag.visible = false;

    flag.x = PlayerBall2.x;
    flag.y = PlayerBall2.y;
}
}

function onKeyDown(e:KeyboardEvent):void
{
    keys[e.keyCode] = true;
}

function onKeyUp(e:KeyboardEvent):void
{
keys[e.keyCode] = false;
}
导入flash.ui.Keyboard;
导入flash.events.Event;
导入flash.events.KeyboardEvent;
导入flash.text.TextField;
导入flash.text.TextFormat;
//添加事件侦听器
PlayerBall.addEventListener(Event.ENTER\u FRAME,update);
stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
stage.addEventListener(KeyboardEvent.KEY\u UP,onKeyUp);
//此数组包含对所有键的引用
变量键:数组=[];
var xSpeed1:Number=0;
变量ySpeed1:Number=0;
var xSpeed2:Number=0;
变量ySpeed2:Number=0;
var hasFlag:int=0;
var collide:Boolean=false;
函数isWithin(object1:Object,object2:Object,barrier:Number):布尔
{
变量距离:Number=Math.sqrt((object1.x-object2.x)(object1.x-object2.x)+(object1.y-object2.y)(object1.y-object2.y));
如果(距离5?ySpeed1:ySpeed1+0.3;
}
如果(!(键[Keyboard.UP])&(!(键[Keyboard.DOWN]))
{
ySpeed1=ySpeed1>0?ySpeed1-.2:ySpeed1+.2;
}
if(键[键盘右])
{
xSpeed1=xSpeed1>5?xSpeed1:xSpeed1+.3;
}
if(键[键盘左])
{
xSpeed1=xSpeed1<-5?xSpeed1:xSpeed1-.3;
}
如果(!(键[键盘.右])和(!(键[键盘.左])
{
xSpeed1=xSpeed1>0?xSpeed1-.2:xSpeed1+.2;
}
if(键[Keyboard.W])
{
ySpeed2=ySpeed2<-5?ySpeed2:ySpeed2-.3;
}
if(键[Keyboard.S])
{
ySpeed2=ySpeed2>5?ySpeed2:ySpeed2+.3;
}
如果(!(键[keys.W])和(!(键[keys.S]))
{
ySpeed2=ySpeed2>0?ySpeed2-.2:ySpeed2+.2;
}
如果(键[键盘D])
{
xSpeed2=xSpeed2>5?xSpeed2:xSpeed2+.3;
}
如果(键[键盘A])
{
xSpeed2=xSpeed2<-5?xSpeed2:xSpeed2-.3;
}
如果(!(键[Keyboard.A])&&(!(键[Keyboard.D]))
{
xSpeed2=xSpeed2>0?xSpeed2-.2:xSpeed2+.2;
}
//运动
PlayerBall.x+=xSpeed1;
PlayerBall.y+=ySpeed1;
PlayerBall2.x+=xSpeed2;
PlayerBall2.y+=ySpeed2;
如果(hasFlag==1)
{
flag.x=PlayerBall.x;
flag.y=PlayerBall.y;
}
如果(hasFlag==2)
{
flag.x=PlayerBall2.x;
flag.y=PlayerBall2.y
}
//碰撞检查
碰撞=isWithin(PlayerBall,flag,PlayerBall.width/2+flag.width/2);
如果(flag.visible&&collide)
{
hasFlag=1;
flag.visible=false;
flag.x=PlayerBall.x;
flag.y=PlayerBall.y;
}
collide=isWithin(PlayerBall2,flag,(PlayerBall2.width/2+flag.width/2));
如果(flag.visible&&collide)
{
hasFlag=2;
flag.visible=false;
flag.x=PlayerBall2.x;
flag.y=PlayerBall2.y;
}
}
函数onKeyDown(e:键盘事件):无效
{
键[e.keyCode]=真;
}
函数onKeyUp(e:键盘事件):无效
{
密钥[e.keyCode]=假;
}

您缺少乘法运算符。请更改行

var distance:Number = Math.sqrt((object1.x - object2.x)(object1.x - object2.x) + (object1.y - object2.y)(object1.y - object2.y));


嗯,我可以看出您的“var distance”计算中存在一个问题。如果您想将括号内的减法值相乘,您应该在每对的结束括号和开始括号之间加一个“*”,即:

var distance:Number = Math.sqrt((object1.x - object2.x)*(object1.x - object2.x) + (object1.y - object2.y)*(object1.y - object2.y));

我猜,你会遇到这样的错误,因为编译器会将每对括号中的第二组括号解释为包含函数的参数。因此“值不是函数”。

哇,我觉得自己像个白痴。这就是我学习在TI Basic上编程所得到的,这种语法实际上是有效的。非常感谢!
var distance:Number = Math.sqrt((object1.x - object2.x)*(object1.x - object2.x) + (object1.y - object2.y)*(object1.y - object2.y));