2014-04-23 2 views
0

Прежде всего, через свои поиски я понял, что это было задано тысячу раз раньше, извините, но у меня возникли проблемы с интерпретацией ответов. Я очень новичок в ActionScript 3 и только начинающий программист в целом.TypeError: Ошибка # 1006: значение не является функцией - что я делаю неправильно?

Так что я программирую простую игру, где некоторые шары движутся и ускоряются вокруг. Однако всякий раз, когда я вызываю свою функцию проверки столкновений (isWithin), она дает ошибку № 1006: Значение не является функцией. Я вызываю или объявляю функцию неправильно?

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; 
} 

ответ

0

Ну, я вижу проблему в вас расчета 'вар расстояния'. Если вы имеете в виду умножать в квадратные скобки значения вычитания, вы должны поставить «*» между концом и начать скобки каждой пары, а именно:

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

Вы получаете эту конкретную ошибку, я предполагаю, что, поскольку компилятор интерпретирует второй набор скобок в каждой паре как содержащий параметры для функции. Следовательно, «значение не является функцией».

+0

Вау, я чувствую себя идиотом. Это то, что я получаю от обучения программированию на TI-Basic, где этот вид синтаксиса действительно работает. Огромное спасибо! –

0

Вам не нужны операторы умножения. Пожалуйста, измените ряд

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

в

var distance:Number = Math.sqrt((object1.x - object2.x)*(object1.x - object2.x) + (object1.y - object2.y)*(object1.y - object2.y)); 
Смежные вопросы