ece 462 object-oriented progggramming using …ece 462 object-oriented progggramming using c++ and...

73
ECE 462 Object-Oriented Programming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu l@ d d yunglu@purdue.edu YHL Double Buffering 1

Upload: others

Post on 21-Jun-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

ECE 462Object-Oriented Programmingj g g

using C++ and Java

Flickering and Double Buffering

Yung-Hsiang Lul @ d [email protected]

YHL Double Buffering 1

Page 2: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

FlickeringFlickering

YHL Double Buffering 2

Page 3: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

No FlickeringNo Flickering

YHL Double Buffering 3

Page 4: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

FlickeringFlickering

• Goal: continuously iterate through the three imagesy g g• Approach: draw background first then draw an image• Problem: occasionally, only the background is shown on

the screen without any of the three images• Result: the character sometimes disappears

YHL Double Buffering 4

Page 5: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

Interleaving of Drawing and DisplayInterleaving of Drawing and Display

public void draw(Graphics g) {// draw backgroundg.drawImage(bgImage, 0, 0, null);

//sent to screen

// draw imageg.drawImage(anim.getImage(), 0, 0, null);

}}

YHL Double Buffering 5

Page 6: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

Possible SolutionsPossible Solutions

• erase and draw difference

⇒ find the differences between each pair of images is not trivial Interleaving is still a problemis not trivial. Interleaving is still a problem.

• make draw atomic (i.e. cannot interleave)⇒ When the screen refreshes and drawing is

YHL Double Buffering 6

gincomplete, the screen will appear black.

Page 7: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

Double Buffering + Page Flipping

• double buffering

Double Buffering Page Flipping

g– buffer 1: working buffer for drawing, incomplete,

invisible to user– buffer 2: completed, shown on screen– switching between the two buffers for frame updates

page flipping• page flipping– the pixels are not copied– instead a pointer switching betweeninstead, a pointer switching between

the two buffers– flipping between monitor refresh

buffer 1screen

YHL Double Buffering 7

pp gbuffer 2

screen

Page 8: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 8

Page 9: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 9

Page 10: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

window.createBufferStrategy(2);gy( );BufferStrategy strategy = window.getBufferStrategy();Graphics g = strategy.getDrawGraphics();draw(g);g.dispose();

()strategy.show();

YHL Double Buffering 10

Page 11: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

Screen Manager with BufferStrategy

YHL Double Buffering 11

Page 12: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

Automatic Document Generation using Javadoc

YHL Double Buffering 12

Page 13: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 13

Page 14: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 14

Page 15: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 15

Page 16: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 16

Page 17: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 17

Page 18: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 18

Page 19: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 19

Page 20: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 20

Page 21: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 21

Page 22: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 22

Page 23: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 23

Page 24: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 24

Page 25: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 25

Page 26: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 26

Page 27: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

Images may be stored involatile memory forperformance reasons.p

YHL Double Buffering 27

Page 28: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

AnimationTest2Using ScreenManager

YHL Double Buffering 28

Page 29: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

Using ScreenManagerUsing ScreenManager

POSSIBLE MODES: an array of different DisplayMode_ y p y

create ScreenManager

findFirstCompatibleMode(POSSIBLE_MODES)

setFullScreen(displayMode)getGraphicsdrawanimationLoop drawdisposeupdate

YHL Double Buffering 29

Page 30: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 30

Page 31: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 31

Page 32: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 32

Page 33: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Double Buffering 33

Page 34: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

ECE 462Object-Oriented Programmingj g g

using C++ and Java

Moving Image: Sprite

Yung-Hsiang Lul @ d [email protected]

YHL Sprite 1

Page 35: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Sprite 2

Page 36: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Sprite 3

Page 37: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

SpriteSprite

YHL Sprite 4

Page 38: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Sprite 5

Page 39: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Sprite 6

Page 40: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Sprite 7

Page 41: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Sprite 8

Page 42: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

SpriteTest1SpriteTest1

YHL Sprite 9

Page 43: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Sprite 10

Page 44: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Sprite 11

Page 45: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Sprite 12

Page 46: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Sprite 13

Page 47: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL Sprite 14

Page 48: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

ECE 462Object-Oriented Programmingj g g

using C++ and Java

Unified Modeling Language

Yung-Hsiang Lul @ d [email protected]

YHL UML 1

Page 49: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

Unified Modeling Language UMLUnified Modeling Language UML

• why to model?y– abstraction, ignore details, or multiple levels of details– identify participating objects

communicate with people– communicate with people– use tools to generate code, check correctness ...

• why UML?– language independent– platform independent– international standard– international standard– expressive (state, sequence, time, interface ...)– tool rich (UML → code, code → UML ... )

YHL UML 2

Page 50: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL UML 3

Page 51: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL UML 4

Page 52: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

UML Example in NetbeansUML Example in Netbeans

YHL UML 5

Page 53: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL UML 6

Page 54: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL UML 7

Page 55: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL UML 8

Page 56: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL UML 9

Page 57: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

What Does a Model Say?What Does a Model Say?

• relationships among objectsp g j– which objects participate in an activity– actions and interfaces– transitions of attributes

• sequence of actions• specialization, composition, ownership • quantities

• In addition, one critical value of a model is to help a developer think before doing.

YHL UML 10

p g

Page 58: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

Modeling a BankModeling a Bank

• objects:j– people: customers, tellers, bank managers, loan evaluators,

ATM maintainers ...– data: accountsdata: accounts– properties: branch offices, ATM machines, furniture ...

• actions: deposit, withdraw, apply for loans, approve or reject applications collect money from ATMapplications, collect money from ATM ...

• relationships among objects– customer can deposit, withdraw cash, or talk to teller– customer cannot talk to ATM maintainer– ATM maintainer cannot approve or reject loan applications– ATM can accept deposit; desk cannot

YHL UML 11

ATM can accept deposit; desk cannot ...

Page 59: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL UML 12

Page 60: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL UML 13

Page 61: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

Model States and TransitionsModel States and Transitions

• Many objects' behaviors depend on the values (i.e. y j p (state) of the objects' attributes.– age ⇒ vote

account balance ⇒ withdraw– account balance ⇒ withdraw– available credit ⇒ purchase

• Objects' behaviors often follow strict orders based on the transitions of the attributes.– vending machine must accept payment before returning changes– customer must open an account before withdrawing money– customer must open an account before withdrawing money– a user must enter the password before checking email– a bank customer must insert the ATM card and enter PIN before

deposit

YHL UML 14

deposit

Page 62: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL UML 15

Page 63: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

Sequence of ActionsSequence of Actions

• State diagrams do not express the objects involved. g p j• For example, the previous diagram does not specify the

necessity of a customer and an ATM machine.• In fact, three objects are involved

– customerATM– ATM

– account (and the balance)

YHL UML 16

Page 64: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL UML 17

Page 65: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

Class DiagramClass Diagram

YHL UML 18

Page 66: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL UML 19

Page 67: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

QuantityQuantity

YHL UML 20

Page 68: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL UML 21

Page 69: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

Start a UML Project in NetbeansStart a UML Project in Netbeans

YHL UML 22

Page 70: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL UML 23

Page 71: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL UML 24

Page 72: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL UML 25

Page 73: ECE 462 Object-Oriented Progggramming using …ECE 462 Object-Oriented Progggramming using C++ and Java Flickering and Double Buffering Yung-Hsiang Lu yungl@ d dlu@purdue.edu YHL Double

YHL UML 26