1136: неверное количество аргументов.Ожидаемое 0. AS3 Flash Cs4 (Раунд 2) - PullRequest
0 голосов
/ 20 мая 2010

(я спрашивал об этом раньше, но я не думаю, что я был достаточно прямолинеен с моим вопросом, и поэтому он не был решен, так что здесь снова!)

Я работаю над книгой под названием Foundation Actionscript 3.0 Animation, заставляющей вещи двигаться .

Сейчас я в главе 9 - Обнаружение столкновения . В двух строках моего кода я получаю ошибку 1135, сообщая, что у меня неверное количество аргументов. Я выделил две области, в которых это происходит со звездочками:

package 
{ 
import flash.display.Sprite; 
import flash.events.Event; 
public class Bubbles extends Sprite 
{ 
private var balls:Array; 
private var numBalls:Number = 10; 
private var centerBall:Ball; 
private var bounce:Number = -1; 

private var spring:Number = 0.2; 
public function Bubbles() 
{ 
init(); 
} 
private function init():void 
{ 
balls = new Array(); 
***centerBall = new Ball(100, 0xcccccc);*** 
addChild(centerBall); 
centerBall.x = stage.stageWidth / 2; 
centerBall.y = stage.stageHeight / 2; 
for(var i:uint = 0; i < numBalls; i++) 
{ 
***var ball:Ball = new Ball(Math.random() * 
40 + 5, 
Math.random() * 0xffffff);*** 
ball.x = Math.random() * stage.stageWidth; 
ball.y = Math.random() * stage.stageHeight; 
ball.vx = Math.random() * 6 - 3; 
ball.vy = Math.random() * 6 - 3; 
addChild(ball); 
balls.push(ball); 
} 
addEventListener(Event.ENTER_FRAME, onEnterFrame); 
} 
private function onEnterFrame(event:Event):void 
{ 
for(var i:uint = 0; i < numBalls; i++) 
{ 
var ball:Ball = balls[i]; 
move(ball); 
var dx:Number = ball.x - centerBall.x; 
var dy:Number = ball.y - centerBall.y; 
var dist:Number = Math.sqrt(dx * dx + dy * dy); 
var minDist:Number = ball.radius + centerBall.radius; 
if(dist < minDist) 
{ 
var angle:Number = Math.atan2(dy, dx); 
var tx:Number = centerBall.x + 
Math.cos(angle) * minDist; 
var ty:Number = centerBall.y + 
Math.sin(angle) * minDist; 
ball.vx += (tx - ball.x) * spring; 
ball.vy += (ty - ball.y) * spring; 
} 
} 
} 
private function move(ball:Ball):void
{ 
ball.x += ball.vx; 
ball.y += ball.vy; 
if(ball.x + ball.radius > stage.stageWidth) 
{ 
ball.x = stage.stageWidth - ball.radius; 
ball.vx *= bounce; 
} 
else if(ball.x - ball.radius < 0) 
{ 
ball.x = ball.radius; 
ball.vx *= bounce; 
} 
if(ball.y + ball.radius > stage.stageHeight) 
{ 
ball.y = stage.stageHeight - ball.radius; 
ball.vy *= bounce; 
} 
else if(ball.y - ball.radius < 0) 
{ 
ball.y = ball.radius; 
ball.vy *= bounce; 
} 
} 
} 
} 

Я думаю, что это связано с отсутствием Ball.as, когда я читал учебник, я предполагал, что это означает, что мне нужно было создать на сцене мувиклип с мячом, а затем экспортировать его для actioncript с именем класса Будучи Боллом, однако, пролистывая книгу, я увидел, что Ball.as уже существует, заявив, что, возможно, мне понадобится снова использовать это позже в книге, это читается:

package 
{ 
import flash.display.Sprite; 
public class Ball extends Sprite 
{ 
private var radius:Number; 
private var color:uint; 
public var vx:Number=0; 
public var vy:Number=0; 
public function Ball(radius:Number=40, color:uint=0xff0000) 
{ 
this.radius=radius; 
this.color=color; init(); 
} 
public function init():void 
{
 graphics.beginFill(color); 
graphics.drawCircle(0, 0, radius); 
graphics.endFill();
 }
 }
 }

Это позволило остановить появление всех ошибок, однако, оно не передавало никаких эффектов от Bubbles.as, оно просто отображало красный шар в центре сцены. Как бы я изменил этот код, чтобы работать в пользу Bubbles.as?

Пожалуйста, помогите! Спасибо!

1 Ответ

0 голосов
/ 20 мая 2010

Он работал нормально для меня, однако мне нужно было внести некоторые изменения в код, который вы предоставили - я заметил, что из вашего класса Bubbles вы пытаетесь получить доступ к свойствам Ball, которые установлены как private (radius, color), либо сделайте их общедоступными, либо создайте подходящие методы получения / установки для этого вопроса.

public var radius:Number;
public var color:uint;

или если вы хотите использовать функции получения / установки

private var _radius:Number;
private var _color:uint;

public function get radius():Number
{
   return _radius;
}
public function set radius(val:Number):void
{
   _radius = val;
}

public function get color():uint
{
   return _color;
}
public function set color(val:uint):void
{
   _color= val;
}

После того, как это изменение было сделано, я просто установил Bubbles в качестве корня моего документа FLA, и bam!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...