Co do pierwszego problemu: mam nadzieję, że to tylko ta literówka:
Kod:
ball.y += ((ball.y - ty) - ball.y) * 0.3;
A ograniczenia możesz zrobić np. tak:
Kod:
function loop(e:Event):void
{
ball.x += ((ball.x + tx) - ball.x) * 0.3;
ball.y += ((ball.y - ty) - ball.y) * 0.3;
ball.x = Math.min(Math.max(radius, ball.x), [szerokosc_ekranu]-radius);
ball.y = Math.min(Math.max(radius, ball.y), [wysokosc_ekranu]-radius);
}
Tak na szybko napisane, bez sprawdzania więc i pewności czy zadziała
Zakładam, że zmienna radius zawiera promień piłki. Jak chcesz to możesz na początek usunąć w ogóle wystąpienia radiusa (czyli zamiast niego wstawić 0).
Daj znać czy i jak działa 
@edit
Kod:
ball.x += ((ball.x + tx) - ball.x) * 0.3;
Zauważ, że "ball.x" się skraca. Więc powyższe przypisane jest równoznaczne z
Poza tym to jest tak średnio poprawne liczenie pozycji. Akcelerometr zwraca Ci przyspieszenie [m/s^2], a nie prędkość. Pomyśl nad tym sam, przypomnij sobie ruch jednostajnie przyspieszony
Jak będziesz miał z tym problem to napisz, pokombinujemy dalej. Mówiąc krótko: może i jakoś to tam działa, ale jak na moje nie jest to zgodne z prawami fizyki