![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2010
Сообщений: 13
|
Здравствуйте.
Я тут одно приложение делаю, а точнее с его помощью осваиваю AS 3.0 =) Представляет из себя оное игру: внизу платформа, сверху кирпичики, надо отбивать мяч платформой так, чтобы разбить все кирпичики. Сразу скажу, что за основу взял пример из книги Гари Розенцвейга (там разрешено использовать код в учебных целях, а тем более модифицированный). Я столкнулся с проблемой: можно запустить шар так, что одновременно: а)он пробивает несколько блоков НАСКВОЗЬ (!) б)он при этом попеременно летит то вверх, то вниз (от чего же он отражается? О.о) Что могло бы послужить причиной этому и как это исправить? =) Как я уже модифицировал приложение: http://vkontakte.ru/app1907812_21135075 Код движения мяча и столкновений с кирпичами: if (ball ==null) { return; } if (lastTime ==0) { lastTime = getTimer(); } var timePassed:int = getTimer() - lastTime; lastTime +=timePassed; var newBallX = ball.x + ballDX*timePassed; var newBallY = ball.y + ballDY*timePassed; var oldBallRect = new Rectangle(ball.x - ballRadius, ball.y-ballRadius, ballRadius*2, ballRadius*2); var newBallRect = new Rectangle(newBallX-ballRadius, newBallY-ballRadius, ballRadius*2, ballRadius*2); var paddleRect = new Rectangle(paddle.x-paddleWidth/2, paddle.y-paddleHeight/2, paddleWidth, paddleHeight); if (newBallRect.bottom >= paddleRect.top) { if (oldBallRect.bottom < paddleRect.top) { if (newBallRect.right > paddleRect.left) { if (newBallRect.left < paddleRect.right) { newBallY -= 2*(newBallRect.bottom - paddleRect.top); ballDY *= -1; ballDX = (newBallX-paddle.x)*paddleCurve; } } } else if (newBallRect.top >400) { removeChild(ball); ball = null; if (balls >0) { balls--; gameMessage.text = "Кликните, когда будете готовы."; } else { endGame(); } return; } } if (newBallRect.top < wallTop) { newBallY += 2*(wallTop - newBallRect.top); ballDY *= -1; } if (newBallRect.left < wallLeft) { newBallX += 2*(wallLeft - newBallRect.left); ballDX *= -1; } if (newBallRect.right > wallRight) { newBallX += 2*(wallRight - newBallRect.right); ballDX *= -1; } for (var i:int=bricks.length-1; i>=0; i--) { var brickRect:Rectangle = bricks[i].getRect(this); if (brickRect.intersects(newBallRect)) { if (oldBallRect.right < brickRect.left) { newBallX += 2*(brickRect.left - oldBallRect.right); ballDX *=-1; } else if (oldBallRect.left > brickRect.right) { newBallX += 2*(brickRect.right - oldBallRect.left); ballDX *= -1; } if (oldBallRect.top > brickRect.bottom) { ballDY *= -1; newBallY += 2*(brickRect.bottom - newBallRect.top); } else if (oldBallRect.bottom < brickRect.top) { ballDY *= -1; newBallY += 2*(brickRect.top - newBallRect.bottom); } if (bricks[i].currentFrame==1) { removeChild(bricks[i]); bricks.splice(i,1); bricksLost(); } else { bricks[i].gotoAndStop(bricks[i].currentFrame-1); } } if (bricks.length <1) { nextLevel(); return; } } ball.x = newBallX; ball.y = newBallY; Сразу прошу извинить за длинное сообщение. Последний раз редактировалось Sphinx_Rider; 26.07.2010 в 18:10. Причина: Уточнение |
![]() |
![]() |
Часовой пояс GMT +4, время: 05:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|