Java小球和木塊碰撞是一個(gè)經(jīng)典的計(jì)算機(jī)圖形學(xué)問題,也是許多游戲中經(jīng)常使用的效果之一。下面我們將介紹如何在Java中實(shí)現(xiàn)小球和木塊的碰撞效果。
public class Ball { private int x, y, r; private int dx, dy; public Ball(int x, int y, int r, int dx, int dy) { this.x = x; this.y = y; this.r = r; this.dx = dx; this.dy = dy; } public void move() { x += dx; y += dy; } public void collide(Block block) { int bx = block.getX(); int by = block.getY(); int bw = block.getWidth(); int bh = block.getHeight(); int cx = Math.max(Math.min(x, bx + bw), bx); int cy = Math.max(Math.min(y, by + bh), by); int distance = (x - cx) * (x - cx) + (y - cy) * (y - cy); if (distance< r * r) { if (cx == bx || cx == bx + bw) { dx = -dx; } if (cy == by || cy == by + bh) { dy = -dy; } } } } public class Block { private int x, y, w, h; public Block(int x, int y, int w, int h) { this.x = x; this.y = y; this.w = w; this.h = h; } public int getX() { return x; } public int getY() { return y; } public int getWidth() { return w; } public int getHeight() { return h; } }
在上述代碼中,Ball表示小球,Block表示木塊。Ball和Block都有自己的坐標(biāo)和寬度、高度屬性,Ball還有半徑和速度屬性。move方法表示小球的運(yùn)動(dòng),collide方法表示小球和木塊之間的碰撞效果。
在collide方法中,首先計(jì)算出小球與木塊之間的最短距離,如果小球與木塊相交,則反彈小球方向。反彈方向是通過判斷小球與木塊碰撞點(diǎn)的位置來確定的。
在實(shí)際應(yīng)用中,我們可以在畫布中繪制小球和木塊,并通過Key事件或鼠標(biāo)事件控制小球的移動(dòng)方向。當(dāng)小球與木塊碰撞時(shí),我們可以播放碰撞音效或顯示碰撞效果來增加游戲體驗(yàn)。