中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

58同城煙臺(tái)網(wǎng)站建設(shè)肇慶網(wǎng)站推廣排名

58同城煙臺(tái)網(wǎng)站建設(shè),肇慶網(wǎng)站推廣排名,北京開發(fā)網(wǎng)站建設(shè),大數(shù)據(jù)培訓(xùn)哪家好畫筆Graphics Java中提供了Graphics類,他是一個(gè)抽象的畫筆,可以在Canvas組件(畫布)上繪制豐富多彩的幾何圖和位圖。 Graphics常用的畫圖方法如下: drawLine(): 繪制直線drawString(): 繪制字符串drawRect(): 繪制矩形drawRoundRect(): 繪制…

畫筆Graphics

Java中提供了Graphics類,他是一個(gè)抽象的畫筆,可以在Canvas組件(畫布)上繪制豐富多彩的幾何圖和位圖。

Graphics常用的畫圖方法如下:

  • drawLine(): 繪制直線
  • drawString(): 繪制字符串
  • drawRect(): 繪制矩形
  • drawRoundRect(): 繪制帶圓角的矩形
  • drawOval():繪制橢圓形
  • drawPolygon():繪制多邊形邊框
  • drawArc():繪制一段圓弧(可能是橢圓的圓弧)
  • drawPolyline():繪制折線
  • fillRect():填充一個(gè)矩形區(qū)域
  • fillRoundRect():填充一個(gè)圓角矩形區(qū)域
  • fillOval():填充橢圓形
  • fillPolygon():填充多邊形邊框
  • fillArc():填充一段圓弧(可能是橢圓的圓弧)
  • drawImage():繪制位圖

AWT專門提供了一個(gè)Canvas類作為繪圖的畫布,程序可以通過創(chuàng)建Canvas的子類,并重寫它的paint()方法來實(shí)現(xiàn)繪圖。

測(cè)試代碼:

  • Canvas()畫布類 paint方法畫圖,方法中傳入畫筆形參
  • Canvas()畫布類 setSize(250,250);方法設(shè)置畫布大小
  • Canvas()畫布類 repaint(); //清除后重新繪制
  • Graphics().setColor方法設(shè)置畫筆顏色,畫筆執(zhí)行畫圖動(dòng)作(紅色值,綠色值,藍(lán)色值) 紅綠藍(lán)三色取值范圍0-255 組合起來可以組成人類可見的任何顏色
 
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import java.util.concurrent.atomic.AtomicReference;/*** @ClassName DrawSimple* @projectName: object1* @author: Zhangmingda* @description: XXX* date: 2021/5/7.*/
public class DrawSimple {public static void main(String[] args) {//窗口Frame frame = new Frame("簡(jiǎn)單畫圖示例");//窗口關(guān)閉按鈕動(dòng)作WindowListener closeListener = new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.out.println("窗口關(guān)閉");System.exit(0);}};frame.addWindowListener(closeListener);//繪制圖形形狀變量AtomicReference<String> shape = new AtomicReference<>();//畫布Canvas canvas = new Canvas(){Random random = new Random();@Overridepublic void paint(Graphics g) { //g為畫筆System.out.println("畫圖中");if (shape.get() != null){switch (shape.get()){case "rect"://設(shè)置畫筆顏色Color(紅色值,綠色值,藍(lán)色值) 紅綠藍(lán)三色取值范圍0-255 組合起來可以組成人類可見的任何顏色g.setColor(new Color(255,0,0));//畫矩形,x,y分別為起始位置,后面兩個(gè)參數(shù)為寬,高 Random.nextInt(200) 為偽隨機(jī)數(shù)g.drawRect(20,20,random.nextInt(200),random.nextInt(200));break;case "oval"://畫橢圓g.setColor(new Color(10,100,30));g.drawOval(40,20,random.nextInt(200),random.nextInt(200));}}}};canvas.setSize(250,250);frame.add(canvas);//容器Panel panel = new Panel();//按鈕Button drawRectBtn = new Button("畫矩形");Button drawOvalBtn = new Button("畫橢圓");//按鈕綁定事件drawRectBtn.addActionListener(e ->{shape.set("rect");canvas.repaint(); //清除后重新繪制});drawOvalBtn.addActionListener(e ->{shape.set("oval");canvas.repaint(); //清除后重新繪制});panel.add(drawOvalBtn);panel.add(drawRectBtn);frame.add(panel,BorderLayout.SOUTH);//窗口自動(dòng)調(diào)整大小frame.setLocation(400,300);frame.pack();frame.setVisible(true);}
}

開發(fā)彈球小游戲

開發(fā)思路:動(dòng)畫,就是間隔一定的時(shí)間(通常小于1秒)重新繪制新的圖像,兩次繪制的圖像之間差異較小,肉眼看起來就成了所謂的動(dòng)畫。這個(gè)程序我們要借助Swing包的一個(gè)Timer類。

Timer(int delay, ActionListener listener): 每間隔delay秒,系統(tǒng)自動(dòng)出發(fā)ActionListener監(jiān)聽器里的事件處理器(actionPerformed方法)

知識(shí)點(diǎn):

  • KeyListener 實(shí)現(xiàn)監(jiān)聽鍵盤按鍵 觸發(fā)移動(dòng)球拍
  • 畫圖邏輯:球到了畫布的X軸左右端,向相反方向移動(dòng)位置,到了Y軸頂端位置0,或者到了球拍接觸區(qū)域向相反方向移動(dòng)位置
  • Timer定時(shí)器,每隔毫秒級(jí)別重新畫圖
  • 用到的變量全部定義為類變量

?示例代碼:

import com.sun.source.tree.NewClassTree;import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;/*** @ClassName Pinball* @projectName: object1* @author: Zhangmingda* @description: XXX* date: 2021/5/7.*/
public class Pinball {//定義球拍初始位置用隨機(jī)對(duì)象private Random random = new Random();/*** 設(shè)置畫布大小:寬高*/private int canvaWidth = 300;private int canvaHeight = 400;/*** 球拍初始參數(shù)*///拍子大小位置private int rectX = random.nextInt(200); //拍子所在橫坐標(biāo)位置,要在畫布范圍之內(nèi),private int rectY = 355; //拍子所在Y軸坐標(biāo)位置小于400,和底部留一定空隙private int rectWidth = 60; //寬度60private int rectHeight = 15; //厚度//拍子按下按鍵拍子移動(dòng)的像素大小(步伐)int pace =10;/*** 小球的尺寸位置初始參數(shù)*/private int ballSize =15;private int ballX = random.nextInt(200);private int ballY = random.nextInt(100);/*** 小球運(yùn)動(dòng)速度值*/private int ballYSpeed = 5; //Y 軸移動(dòng)速度private double xyRate = random.nextDouble() - 0.5; //X軸相對(duì)比Y軸運(yùn)動(dòng)速度的比率,返回一個(gè)-0.5 ~0.5之間的數(shù),移動(dòng)方向?yàn)橄蜃蠡蛘呦蛴襭rivate int ballXSpeed = (int) (ballYSpeed * xyRate * 2); // X 軸運(yùn)動(dòng)的速度/*** 定時(shí)器Timer*/private Timer timer;/*** 游戲是否結(jié)束*/private boolean gameOver = false;/*** 方法*/public void play(){/*** 定義窗口,設(shè)置位置和關(guān)閉動(dòng)作*/Frame frame = new Frame("彈球小游戲");frame.setLocation(400,300);frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.out.println("關(guān)閉游戲");System.exit(0);}});/*** 定義畫布*/Canvas canvas = new Canvas(){@Overridepublic void paint(Graphics g) {//如果沒有結(jié)束if (!gameOver){//畫球g.setColor(new Color(30,200,150));g.fillOval(ballX,ballY,ballSize, ballSize);//畫下面的矩形拍子g.setColor(new Color(75, 79, 194));g.fillRect(rectX, rectY, rectWidth, rectHeight);}else { //gameOver了g.setColor(Color.RED);g.setFont(new Font("Times",Font.BOLD,30)); // 設(shè)置字體格式字體g.drawString("Game Over",70, 200);}}};//設(shè)置畫布大小canvas.setPreferredSize(new Dimension(canvaWidth,canvaHeight));frame.add(canvas);/*** 游戲核心邏輯:動(dòng)畫效果*/timer = new Timer(50, new ActionListener() {@Overridepublic void actionPerformed(ActionEvent actionEvent) {/*** 如果到了X軸的兩端,就向反方向畫圖*/if (ballX < 0 || ballX >= canvaWidth - ballSize)ballXSpeed = -ballXSpeed;/*** 如果球接觸到了球拍的X軸和Y軸區(qū)域內(nèi),或者跑到頂端(ballY 坐標(biāo)小于0)就把Y軸反向移動(dòng)*/if (ballY < 0 || (ballY >= rectY - ballSize && ballY  < rectY - ballSize/2) && ballX + ballSize /2 >= rectX && ballX + ballSize /2 <= rectX + rectWidth) {System.out.println("ballX:"+ ballX + "ballY:"+ ballY + "rectX:" + rectX + "rectY:" +rectY);ballYSpeed = -ballYSpeed; //反向速度}else if (ballY >= canvaHeight){ //如果球已經(jīng)掉到畫布之外或者 球拍下 就停止timer循環(huán)timer.stop();gameOver = true;}ballX += ballXSpeed;ballY += ballYSpeed;canvas.repaint();}});timer.start();/*** 窗口監(jiān)聽鍵盤*/KeyListener keyListener = new KeyAdapter() { //添加鍵盤監(jiān)聽器@Overridepublic void keyPressed(KeyEvent e) { //當(dāng)鍵盤被按下時(shí)觸發(fā)
//                System.out.println("按下鍵盤");int KeyCode = e.getKeyCode(); //獲取按下的鍵盤代號(hào)switch (KeyCode){case KeyEvent.VK_LEFT://左鍵按下if(rectX - pace > 0){rectX -= pace;}else {rectX = 0;}break;case KeyEvent.VK_RIGHT://右鍵按下if (rectX + pace < canvaWidth - rectWidth){rectX += pace;}else {rectX = canvaWidth -rectWidth;}break;}canvas.repaint();}};frame.addKeyListener(keyListener);/*** 窗口大小自動(dòng)調(diào)節(jié)到最優(yōu),顯示窗口*/frame.pack();frame.setVisible(true);}public static void main(String[] args) {new Pinball().play();}
}

http://www.risenshineclean.com/news/6386.html

相關(guān)文章:

  • 建英語(yǔ)網(wǎng)站第一推廣網(wǎng)
  • 有沒有什么 網(wǎng)站能夠做試卷排名優(yōu)化服務(wù)
  • 做網(wǎng)站被坑溫州云優(yōu)化seo
  • 淘寶客網(wǎng)站做百度推廣登錄百度賬號(hào)注冊(cè)
  • 網(wǎng)站建設(shè)實(shí)習(xí)生怎么樣百度一下打開網(wǎng)頁(yè)
  • 福安建設(shè)網(wǎng)站網(wǎng)絡(luò)營(yíng)銷公司好不好
  • 網(wǎng)站建設(shè)空間選擇的重要性廈門seo管理
  • 進(jìn)行seo網(wǎng)站建設(shè)今日最新的新聞
  • 哪個(gè)網(wǎng)站可以做計(jì)算機(jī)二級(jí)的題關(guān)鍵詞優(yōu)化系統(tǒng)
  • 微信紅包封面分銷平臺(tái)搜索引擎優(yōu)化的內(nèi)部?jī)?yōu)化
  • 南陽(yáng)做網(wǎng)站seo的收錄網(wǎng)站的平臺(tái)有哪些
  • 網(wǎng)站建設(shè)網(wǎng)頁(yè)制seo研究中心超逸seo
  • 丹陽(yáng)網(wǎng)站優(yōu)化廣東省疫情最新
  • 網(wǎng)站變灰色代碼web網(wǎng)站模板
  • 買公司 網(wǎng)站建設(shè)搜索seo優(yōu)化
  • 國(guó)外域名怎么購(gòu)買windows優(yōu)化大師收費(fèi)
  • 有域名 有固定ip怎么做網(wǎng)站進(jìn)入百度搜索網(wǎng)站
  • 網(wǎng)站開發(fā)軟件系統(tǒng)阿里云域名注冊(cè)流程
  • 網(wǎng)站指向ip列表是什么全國(guó)最好的廣告公司加盟
  • 網(wǎng)站運(yùn)維是做什么的所有關(guān)鍵詞
  • 如何搭建免費(fèi)網(wǎng)站seo推廣營(yíng)銷公司
  • 購(gòu)物網(wǎng)站做推廣銅仁搜狗推廣
  • 做網(wǎng)站只用php不用html馮耀宗seo視頻教程
  • 廈門建設(shè)銀行網(wǎng)站百度引擎搜索
  • 建網(wǎng)站的重要性網(wǎng)絡(luò)營(yíng)銷服務(wù)的內(nèi)容
  • 騰訊短鏈接生成seo褲子的關(guān)鍵詞首頁(yè)排名有哪些
  • 做買衣服的網(wǎng)站友情鏈接互換網(wǎng)站
  • app外包流程濰坊自動(dòng)seo
  • 成都制作網(wǎng)站寧波seo企業(yè)網(wǎng)絡(luò)推廣
  • 購(gòu)物網(wǎng)站建設(shè)思維導(dǎo)圖百度app官方正式版