2012-05-24 4 views
0

Я хочу сделать игру в понг в обработке. Но движение мяча было не очень гладким. Я попытался изменить частоту кадров и уменьшить скорость мяча, но скорость движения кажется не постоянной. Может ли это быть проблемой производительности? Я что-то делаю неправильно или обрабатываю, может быть, неправильно, даже для простых игр? (Моя цель состояла в том, чтобы опробовать process.js и создать игру, которая работает без плагина). Вот мой код:Понг движение не гладкое

// Colorset 
color scrBG; 
color bastards; 

// Border for the Paddle 
int border; 

// The Paddle 
int padWid; 
int padHei; 
float padX; 
float padY; 

// The Ball 
float ballX; 
float ballY; 
int ballRad; 

int speed; 
float velX; 
float velY; 

boolean playing = false; 



void setup() 
{ 
    border = 5; 

    scrBG = #EEEEEE; 
    bastards = #FFF0EB; 

    padWid = 80; 
    padHei = 10; 
    ballRad = 15; 
    speed = 5; 
    velX = velY = speed; 

    size(800, 600); 
    background(scrBG); 
    noStroke(); 
    noCursor(); 
    //frameRate(100); 
    smooth(); 
} 

void draw() 
{ 

    background(bastards);drawPaddle(); 
    drawBall(); 
} 

void drawBall() 
{ 

    if(!playing) 
    { 
    ballX = padX+padWid/2; 
    ballY = height-border-padHei-ballRad/2-2; 
    } 
    else 
    { 
if(ballY > height) 
{ 
    ballOut(); 
} 

if(ballY > padY && ballX < padX + padWid && ballX > padX) 
{ 
    velY = -velY; 
    ballY = padY-ballRad-1; 
} 
if(ballX < ballRad) 
{ 
    velX = -velX; 
    ballX = ballRad+1; 
} 
if(ballX > width-ballRad) 
{ 
    velX = -velX; 
    ballX = width-ballRad-1; 
} 
if(ballY < ballRad) 
{ 
    velY = -velY; 
    ballY = ballRad+1; 
} 


ballY += velY; 
ballX += velX; 
    } 

    fill(0); 
    ellipse(ballX, ballY, ballRad*2, ballRad*2); 

} 

void drawPaddle() 
{ 
    padX = constrain(mouseX, border, width-padWid-border); 
    padY = height-padHei-border; 

    fill(0); 
    rect(padX, padY, padWid, padHei); 
} 

void startLevel() 
{ 
    playing = true; 
} 

void resetLevel() 
{ 
    playing = false; 
} 

void ballOut() 
{ 
    playing = false; 
} 

void mouseClicked() 
{ 
    if(playing) 
    { 
    resetLevel(); 
    } 
    else 
    { 
    startLevel(); 
    } 
} 

ответ

1

Ваша рамка кажется слишком высокой для меня. 30 кадров обычно являются хорошей скоростью для плавной анимации в таких вещах, как Processing и Flash. Я бы также изменил все мои ints на float, так как float лучше для гладкой анимации.

Следующее, что я хотел бы рассмотреть, это добавление некоторого ослабления, это может сгладить его. Смотрите эту информацию на processing.org:

www.processing.org/learning/basics/easing.html

и поиграйте.

+0

Спасибо, что ответили. Как вы можете видеть, высокая частота кадров закомментирована. Я просто протестировал его. Я использовал поплавки для всего, что связано с движением шаров. Я попытался сделать все поплавком, но это не имеет никакого значения. Просто чтобы уточнить: нет большой проблемы, я просто думаю, что движение не является полностью постоянным. –

+0

Если вы закомментируете frameRate, ваш скрипт будет работать так же быстро, как ваш компьютер будет работать. Таким образом, комментируя, что high frameRate может заставить его работать быстрее, чем 100FPS. Проверьте использование процессора. Я использую mac, и я заметил, что обработка может быть необычно тяжелой. Когда я искал это через некоторое время назад, я обнаружил, что я не единственный, у кого была эта проблема. –

+0

Я тоже это сделал, но движение мяча все еще шатко. Вы тоже это видите? (Я использую окна. Я не думаю, что использование процессора должно быть проблемой, его новый компьютер) –