Code archives/Graphics/Cartoon Speech Bubbles
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| There's enough parameter's available to make a speech bubble for every occasion. | |||||
; Title: Cartoon Speech Bubbles
;Programmer: Andy Amaya
; Date: 2011.06.21
; FillTriangle by Tom Toad
;http://www.blitzmax.com/codearcs/codearcs.php?code=1200
AppTitle "Cartoon Speech Bubbles"
Global sw, sh
sw = 800: sh = 600
Graphics sw, sh, 32, 2
SetBuffer BackBuffer()
Const black% = $00
Const darkblue%= $80
Const red% = $FF0000
Const green% = $8000
Const palegreen%=$A0FFA0
Const gray1% = $D0D0D0
Const yellow%= $FFFFC0
Const white% = $FFFFFF
Const skyblue%=$20A0FF
setClsColor skyblue
While MouseHit(1) = 0
angle# = (angle# + 20.0)
If angle > 360.0 Then angle = angle - 360.0
Cls
colr = (colr + 1) Mod 4
Select colr
Case 0: fill = white: outline = black
Case 1: fill = gray1: outline = black
Case 2: fill = yellow: outline = darkblue
Case 3: fill = palegreen: outline = green
End Select
sBubble(400, 300, 300, 150, Rand(30,200), angle, Rand(2,6), outline, fill)
setColor red
Text 400,260,"Speech bubbles can be",True
Text 400,275, "small or large,", True
Text 400,290,"and can be just about any color!",True
setColor outline
Text 400,335,"R-click for more bubbles",True
Text 400,350,"L-click to exit",True
Flip
WaitMouse()
Wend
Function sBubble(x%, y%, ew%, eh%, tail%, angle#=0., pen%, outline%=0, fill=$FFFFFF)
;=====================================================================================
; sBubble - Speech Bubble function
;=====================================================================================
; Parameters:
; x, y are the center coords of the ellipse used to construct the speech bubble
; ew, eh are the width and height of the ellipse, respectively
; tail = the length of the 'tail' coming from speech bubble its variable so you can
; position the speech bubble far or near to the character
; angle = angle of tail coming from speech bubble NOTE: 0 degrees is due East
; pen = thickness of outline surrounding the speech bubble
; outline = is the color of the outline in Hex (i.e. $000000 = black)
; fill = is the fill color of the bubble in Hex (i.e. $FFFFFF = white)
;
; NB: This function requires: setColor(); fatLine(), and fillTriangle() functions.
;=====================================================================================
Local p2%, rx%, ry%, ltSideX%, ltSideY%, rtSideX%, rtSideY%, tailX%, tailY%
If pen < 2 Then pen = 2
p2% = pen Shl 1
rx = ew/2
ry = eh/2
;draw the outline oval
setColor outline
Oval x-rx-pen, y-ry-pen, ew+p2, eh+p2, True
;calc the points used to draw the tail outline
ltSideX = Cos(angle + 5.)*(rx-5) + x
ltSideY = Sin(angle + 5.)*(ry-5) + y
rtSideX = Cos(angle - 5.)*(rx-5) + x
rtSideY = Sin(angle - 5.)*(ry-5) + y
tailX = Cos(angle)*(rx+tail)+x
tailY = Sin(angle)*(ry+tail)+y
;draw the tail outline
fatLine(ltSideX, ltSideY, tailX, tailY, p2)
fatLine(rtSideX, rtSideY, tailX, tailY, p2)
;fill the tail and the main ellipse
setColor fill
fillTriangle(ltSideX, ltSideY, tailX, tailY, rtSideX, rtSideY)
Oval x-rx,y-ry,ew,eh,True
End Function
Function setColor(hexValue%)
Color (hexValue Shr 16) And 255,(hexValue Shr 8) And 255, hexValue And 255
End Function
Function setClsColor(hexValue%)
ClsColor (hexValue Shr 16) And 255,(hexValue Shr 8) And 255, hexValue And 255
End Function
Function rgb2hex%(r%, g%, b%)
Return (r Shl 16) Or (g Shl 8) Or b
End Function
Function reticle(x,y,colr)
Local r%, g%, b%
r = ColorRed
g = ColorGreen
b = ColorBlue
setColor(colr)
Line(x-5,y,x+5,y)
Line(x,y-5,x,y+5)
Color r,g,b
End Function
;FillTriangle by Tom Toad
;http://www.blitzmax.com/codearcs/codearcs.php?code=1200
Function fillTriangle(x1#,y1#,x2#,y2#,x3#,y3#)
Local slope1#,slope2#,slope3#,x#,y#,length#
;make sure the triangle coordinates are ordered so that x1 < x2 < x3
If x2 < x1 Then x = x2: y = y2: x2 = x1: y2 = y1: x1 = x: y1 = y
If x3 < x1 Then x = x3: y = y3: x3 = x1: y3 = y1: x1 = x: y1 = y
If x3 < x2 Then x = x3: y = y3: x3 = x2: y3 = y2: x2 = x: y2 = y
If x1 <> x3 Then slope1 = (y3-y1)/(x3-x1)
length = x2 - x1
;draw the first half of the triangle
If length <> 0 Then
slope2 = (y2-y1)/(x2-x1)
For x = 0 To length
Line x+x1,x*slope1+y1,x+x1,x*slope2+y1
Next
End If
y = length*slope1+y1
length = x3-x2
;draw the second half
If length <> 0 Then
slope3 = (y3-y2)/(x3-x2)
For x = 0 To length
Line x+x2,x*slope1+y,x+x2,x*slope3+y2
Next
End If
End Function
Function fatLine(x1%, y1%, x2%, y2%, penSize%)
If penSize% < 1 Then Return False
If penSize% = 1 Then Line(x1%, y1%, x2%, y2%): Return
; penSize% is thickness to draw line
offset% = penSize% / 2 ;offset needed to place ovals correctly
; Calculate deltax and deltay for initialization
deltax% = Abs(x2% - x1%)
deltay% = Abs(y2% - y1%)
; Initialize all vars based on which is the independent variable
If deltax% >= deltay% Then
; x is the independent variable
numovals% = deltax% + 1
d% = (2 * deltay%) - deltax%
dinc1% = deltay% Shl 1
dinc2% = (deltay% - deltax%) Shl 1
xinc1% = 1
xinc2% = 1
yinc1% = 0
yinc2% = 1
Else
; y is the independent variable
numovals% = deltay% + 1
d% = (2 * deltax%) - deltay%
dinc1% = deltax% Shl 1
dinc2% = (deltax% - deltay%) Shl 1
xinc1% = 0
xinc2% = 1
yinc1% = 1
yinc2% = 1
End If
; Make sure x and y move in the right directions
If x1% > x2% Then
xinc1% = - xinc1%
xinc2% = - xinc2%
End If
If y1% > y2% Then
yinc1% = - yinc1%
yinc2% = - yinc2%
End If
; Start drawing at x%, y%
x% = x1% - offset%
y% = y1% - offset%
; Draw the filled ovals
For i% = 1 To numovals%
Oval x%, y%, penSize%, penSize%, True
If d% < 0 Then
d% = d% + dinc1%
x% = x% + xinc1%
y% = y% + yinc1%
Else
d% = d% + dinc2%
x% = x% + xinc2%
y% = y% + yinc2%
End If
Next
End Function |
Comments
None.
Code Archives Forum