When I first wrote an AS3 object-oriented project, I took the paradigm too literally 
For example, I built homing missiles, which (although very cool!) individually hunted for all available enemies, and plotted out a course.
There is more than one way to build a project, but one approach that has worked well for me was to write a small set of managers. I would keep the Hero
and PowerUp
as fairly simple objects, which know how to look the way they are supposed to, and how to respond to simple commands you give them, such as hero.showAnimation (WALK + LEFT)
or powerUp.showAnimation (PULSE)
Then I might have either GameObjectManager
or separate PlayerManager
and PowerUpManager
classes. Now you have a class that is above both your objects. In other words, you make Hero
and PowerUp
simple (like pawns on a chessboard) and you create higher-level classes that understand the game logic, and can check the state of many objects before determining an action.
This might look like:
private function onEnterFrame (event:Event):Void {
var currentTime = Lib.getTimer ();
var deltaTime = currentTime - previousTime;
gameObjectManager.update (deltaTime);
}
public function update (deltaTime:Int):Void {
for (powerUp in powerUps) {
if (distanceSquared (powerUp, hero) < 20) {
addIncrement (powerUp.x, hero.x, 0.20);
addIncrement (powerUp.y, hero.y, 0.20);
}
}
}
If I did it again, I’d have one place that updates the homing logic for any homing missile on screen, perhaps in a ProjectileManager
. I wouldn’t give each missile it’s own brain 
Keeping controls centralized also is a godsend when you need to do things such as pausing, saving, restoring or moving to a new level. It’s helpful to have one authority you can go to when you need to change behavior