随机对称生成的脸图【?】

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>orz</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link rel="stylesheet">
</head>
<body style="text-align:center;background-color:#1e576b">
<div>
<input type="text" id="dim" placeholder="dim"/>
<input type="button" id="submit" value="submit"/>
</div>
<div style="margin:1em"><canvas id="logoCanvas"></canvas></div>
</body>
<script src="http://code.jquery.com/jquery-1.8.3.js"></script>
<script type="text/javascript">
function draw(w, h) {
var w = w || 8;
var h = h || 8;
var border = 12;
var val = [];
for (var i = 0; i < h; i += 1) {
var str = [];
for (var j = 0; j < w / 2; j += 1) {
var rand = parseInt(Math.random() * 2);
str[j] = rand;
str[w - j] = rand;
}
val.push(str.join(""));
console.log(str.join(""));
}
var canvas=document.getElementById('logoCanvas');
var fillWidth = border * w;
var fillHeight = border * h;
$(canvas).attr("height", fillHeight + "px");
$(canvas).attr("width", fillWidth + "px");
var ctx=canvas.getContext('2d');
ctx.clearRect(0, 0, fillWidth, fillHeight);
for (var y = 0; y < h; y += 1) {
for (var x = 0; x < w; x += 1) {
ctx.fillStyle= val[y][x] == "1" ? '#000' : '#FFF';
console.log("x y v, %d %d %s", x, y, val[y][x]);
ctx.fillRect(x * border, y * border, border, border);
}
}
}
$(document).ready(function() {
draw();
$("#submit").click(function(){
var d = $("#dim").val();
draw(d, d);
});
});
</script>
</html>
唔……
<html>
<body style="text-align:center;background-color:#1e576b">
<canvas id="logoCanvas"></canvas>
</body>
<script src="http://code.jquery.com/jquery-1.8.3.js"></script>
<script type="text/javascript">
function drawLogo() {
var w = 11;
var h = 17;
var border = 24;
var map = [
[1,1,1,1,1,1,1,1,1,1,1],
[1,0,0,0,0,0,0,0,0,0,1],
[1,0,1,0,1,1,1,1,1,0,1],
[1,0,1,0,0,0,0,0,1,0,1],
[1,0,1,0,1,1,1,0,1,0,1],
[1,0,1,0,1,0,1,0,1,0,1],
[1,0,1,0,1,0,1,0,1,0,1],
[1,0,1,0,0,0,0,0,1,0,1],
[1,0,1,1,1,0,1,1,1,0,1],
[1,0,1,0,0,0,0,0,1,0,1],
[1,0,1,0,1,1,1,0,1,0,1],
[1,0,1,0,1,0,0,0,1,0,1],
[1,0,1,0,1,1,1,0,1,0,1],
[1,0,1,0,0,0,0,0,1,0,1],
[1,0,1,1,1,0,1,1,1,0,1],
[1,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,1]
]
var canvas=document.getElementById('logoCanvas');
var fillWidth = border * w;
var fillHeight = border * h;
$(canvas).attr("height", fillHeight + "px");
$(canvas).attr("width", fillWidth + "px");
var ctx=canvas.getContext('2d');
ctx.clearRect(0, 0, fillWidth, fillHeight);
for (var y = 0; y < h; y += 1) {
for (var x = 0; x < w; x += 1) {
if (map[y][x] == 0) {continue;}
ctx.fillStyle='#FFF';
ctx.fillRect(x * border, y * border, border, border);
}
}
}
$(document).ready(function() {
drawLogo();
});
</script>
</html>

囍
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
<body style="margin:0;" onload="start();">
<canvas id="_canvas"></canvas>
</body>
<script>
// 烟火
function Fire(x, y, life, directionX, directionY) {
this.x = x;
this.y = y;
this.life = life;
this.frames = 0; // 帧数计时
this.directionX = directionX;
this.directionY = directionY;
this.color = "rgb(" + Math.floor(Math.random() * 128 + 128) + "," + Math.floor(Math.random() * 128 + 128) + "," + Math.floor(Math.random() * 128 + 128) +")";
}
Fire.prototype = {
// 行进
move : function() {
this.x += this.directionX;
this.y += this.directionY;
this.directionX *= 0.94;
this.directionY *= 0.94;
this.directionY += 0.3;
this.frames += 1;
},
// 失效
powerOut : function() {
return this.frames == this.life;
},
x : function() {
return this.x;
},
y : function() {
return this.y;
},
color : function() {
return this.color;
}
}
// 烟花
function FirePackage(x, y) {
this.x = x;
this.y = y;
this.fires = new Array();
}
FirePackage.prototype = {
createFires : function(num) {
// 添加烟火
if (!num) {
num = Math.floor(Math.random() * 50) + 10;
}
for (var i = 0; i < num; i += 1) {
var life = Math.floor(Math.random() * 80) + 40;
this.fires[i] = new Fire(this.x, this.y, life, Math.random() * 20 * (Math.random() * 10 >=5 ? (-1) : 1), Math.random() * 20 * (Math.random() * 10 >= 5 ? (-1) : 1));
}
},
boom : function(ctx) {
var powerOutCount = 0;
if (this.powerOut()) {
return;
}
for (var i = 0; i < this.fires.length; i += 1) {
var fire = this.fires[i];
if (!fire.powerOut()) {
fire.move();
ctx.fillStyle= fire.color;
ctx.beginPath();
//console.clear();
//console.log("fire.x :" + fire.x, "fire.y:" + fire.y);
//console.log("fire.color :" + fire.color);
ctx.arc(fire.x,fire.y,5,0,Math.PI*2,true);
ctx.closePath();
ctx.fill();
} else {
powerOutCount += 1;
}
}
if (powerOutCount == this.fires.length) {
this.powerOutFlag = true;
}
},
powerOut : function() {
return this.powerOutFlag ? true : false;
}
}
</script>
<script>
var canvas = document.getElementById('_canvas');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
var ctx=canvas.getContext('2d');
var timeInterval;
window.onresize = function() {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
}
var firePackages = new Array();
function createFirePackage(x, y) {
var firePackage = new FirePackage(x, y);
firePackage.createFires();
firePackages.push(firePackage);
}
var pushInterval;
var pushFire = function() {
clearInterval(pushInterval);
createFirePackage(Math.random() * canvas.width , Math.random() * canvas.height);
pushInterval = setInterval(pushFire, Math.random() * 1000 + 100);
}
function start() {
var loop = function() {
if (firePackages.length == 0) {
createFirePackage(Math.random() * canvas.width , Math.random() * canvas.height);
}
var powerOutCount = 0;
var border = 320;
for (var i = 0; i < firePackages.length; i += 1) {
var firePackage = firePackages[i];
ctx.fillStyle="rgba(0,0,0,0.1)";
ctx.fillRect(0,0,canvas.width,canvas.height);
if (!firePackage.powerOut()) {
firePackage.boom(ctx);
} else {
firePackages[i] = firePackages[firePackages.length - 1];
firePackages.pop();
}
}
var border = 360;
ctx.fillStyle="rgba(255,0,0,1)";
ctx.font = border + "px 黑体";
ctx.fillText("囍",(canvas.width - border) / 2, border);
}
timeInterval = setInterval(loop, 10);
pushFire();
loop();
}
</script>
</html>
@echo off set work_path=./res cd %work_path% for /R %%s in (.,*) do ( echo %%s )
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
DROP!!!!!!!!!!
<script type="text/javascript">
function chgImg(evt) {
var reader = evt.target;
console.log(reader.result);
var file = reader.file;
document.getElementsByTagName("body")[0].setAttribute("style","background-image:url(" + reader.result + ");");
}
document.ondragstart = function(e) {
e.preventDefault();
}
document.ondragover = function(e) {
e.dataTransfer.dragEffect = 'copy';
e.preventDefault();
}
document.ondrop = function(e){
var files = e.dataTransfer.files;
for(var i = 0, len = files.length; i < len; i++)
{
var f = files[i];
if (f.type.indexOf("image") == -1) {continue;}
var reader = new FileReader();
reader.onloadend = chgImg;
reader.file = f;
reader.readAsDataURL(f);
}
e.preventDefault();
}
</script>
</body>
</html>
手册:
scrollToPercentHorizontal(float percent, float time, bool attenuated);//水平滚动容器内容到滚动视图宽度百分比位置上
然而这并没有什么卵用。
笔记:
第一个参数percent将使内部容器向左滚动(内部容器宽度 - 滚动层宽度) * percent 像素的距离
第二个参数time为滚动时间,单位为秒
第三个参数attenuated为true时使滚动过程拥有减速效果
所以想要使内部容器0.5s内减速向左滚动x像素可以调用
float percent = 100.0f * x / (scroll->getInnerContainerSize().width - scroll->getContentSize().width) scroll->scrollToPercentHorizontal(percent, 0.5f, true);
以前的一个a*练习,搬过来凑个数……
A*算法描述见这篇博文
ruby代码:
#encoding=utf-8
MAP = [
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 1, 1, 0, 1, 0],
[0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
]
class Point
attr_accessor :x
attr_accessor :y
attr_accessor :g
attr_accessor :h
attr_accessor :f
attr_accessor :parent
def initialize(x, y, parent)
self.x = x
self.y = y
self.parent = parent
end
def to_s
"#{super.to_s}, #{[self.x, self.y, self.g, self.h, self.f]}"
end
end
$open = {}
$close = {}
def find(sx, sy, ex, ey)
startP = Point.new(sx, sy, nil)
startP.g = 0
pos = startP
while (!$open[[ex, ey]]) do
dealAround(pos, ex, ey) # 检查周围元素,计算f
pos = getMinFPos
end
pos = $open[[ex, ey]]
path = []
while (pos.parent) do
path << [pos.x, pos.y]
pos = pos.parent
end
path << [pos.x, pos.y]
for y in 0...MAP.size
for x in 0...MAP[0].size
print (path.include?([x, y])) ? "☆" : (MAP[y][x] == 0 ? "□" : "■")
end
print "\r\n"
end
p path
end
def getMinFPos
return nil if $open.size < 1
minG = $open.values[0].g
minGPos = $open.values[0]
$open.values.each{|pos|
if minG > pos.g
minG = pos.g
minGPos = pos
end
}
return minGPos
end
def dealAround(pos, endx, endy)
# 将pos加入close列表
$close[[pos.x, pos.y]] = pos
# 将pos从open列表中移出
$open.delete([pos.x, pos.y])
# 检查周围元素
[[-1, -1], [0, -1], [1, -1], [-1, 0], [1, 0], [-1, 1], [0, 1], [1, 1]].each{|posOffset|
# 跳过边界
next if pos.x + posOffset[0] < 0 or pos.y + posOffset[1] < 0 or pos.x + posOffset[0] > MAP[0].size - 1 or pos.y + posOffset[1] > MAP.size - 1
# 跳过不可通行的方块
next if MAP[pos.y + posOffset[1]][pos.x + posOffset[0]] != 0
# 跳过close列表
next if $close[[pos.x + posOffset[0], pos.y + posOffset[1]]]
newPos = Point.new(pos.x + posOffset[0], pos.y + posOffset[1], pos)
# 计算g
if posOffset[0].abs + posOffset[1].abs == 2 # 斜向
newPos.g = pos.g + 14
else
newPos.g = pos.g + 10
end
# 计算h
newPos.h = (endx - newPos.x).abs * 10 + (endy - newPos.y).abs * 10
# 计算f
newPos.f = newPos.g + newPos.h
# 添加到open列表
if $open[[newPos.x, newPos.y]] # 已存在
thePos = $open[[newPos.x, newPos.y]]
tempG = ((thePos.x - pos.x).abs + (thePos.y - pos.y).abs == 2) ? (pos.g + 14) : (pos.g + 10)
if tempG < thePos.g # 当前节点使g更小
thePos.g = tempG
thePos.f = tempG + thePos.h
thePos.parent = pos # 修改父节点为当前节点
end
else # 不存在
$open[[newPos.x, newPos.y]] = newPos
end
}
end
find(0, 0, 7, 7)
docker@boot2docker:~$ docker images
docker@boot2docker:~$ docker run -t -i -p 50002:8080 chukong/quick-server:0.4.0
|root@ID| exit
docker@boot2docker:~$ docker commit ID chukong/quick-server:0.4.0
docker@boot2docker:~$ docker run -d -p 50003:22 chukong/quick-server:0.4.0 /usr/sbin/sshd -D
|root@ID| cd /home/sure52 |root@ID| mkdir qs_code |root@ID| chmod o+w -R qs_code |root@ID| cd qs_code |root@ID| git init |root@ID| vim README.md |root@ID| git add "." |root@ID| git commit -m "base version" |root@ID| git remote add origin ssh://sure52@127.0.0.1/home/sure52/qs_code/.git |root@ID| git push origin |root@ID| git remote show origin
E:\> git clone ssh://sure52@192.168.59.103:50003/home/sure52/qs_code/.git
|root@ID| chmod -R 777 .git
|root@ID| cd .git |root@ID| vi config
curl "http://192.168.59.103:50002/_server/user/session/?id=sure52"
userDefinedCodes = {
luaRepoPrefix = "server.user_codes",
localRepo = "/home/sure52/qs_code/",
localDest = "/opt/qs/openresty/server/user_codes",
--localRepo = "/home/cheeray/work/user_codes",
--localDest = "/home/cheeray/work/quick-server/src/server/user_codes",
uriPrefix = {
module1 = "http_test1",
module2 = "http_test2",
},
},
curl "http://192.168.59.103:50002/_Server/user/uploadcodes?commit=f54ab5e0ddd0d93b55ae4f9169c25caf52a88392&session_id=f56b3cb7fc96dfb25e501c56e8f9b057"
curl "http://192.168.59.103:50002/http_test1/Say/SayHello?session_id=f56b3cb7fc96dfb25e501c56e8f9b057&name=a_name"
= =唔
--[[
local labelEx = require("ui.ui_label_ex"):create(300) -- width
l:addChild(labelEx, 100)
labelEx:setPosition(100, self.visibleSize.height)
labelEx:setString("普通文字$C<3>颜色$C<1>普通颜色$S<36>大小$S<0>普通大小$I<101>←图片$B<button>按钮$E<99>表情\n换\n行")
]]--
local UILabelEx = class("UILabelEx", require("ui.ui_common"))
-- 控制字符
UILabelEx.C_CHR = "$"
-- 单字显示时间间隔
UILabelEx.WAIT_FOR_MESSAGE = 5 / 60
-- 默认字号
UILabelEx.DEFAULT_FONT_SIZE = 24
-- 行间距
UILabelEx.DEFAULT_LINE_HEIGHT = 12
function UILabelEx:ctor(width, show_fast)
UILabelEx.super.ctor(self, "")
self._defaultFontSize = UILabelEx.DEFAULT_FONT_SIZE
self._lineHeight = UILabelEx.DEFAULT_LINE_HEIGHT
self._width = width
self._show_fast = not not show_fast
self._height = self._defaultFontSize
self._rootWgt = ccui.Layout:create()
self:addChild(self._rootWgt, 100)
self:clear()
end
function UILabelEx:clear()
self._contentStr = ""
self._texts = self._texts or {} -- 文字
self._images = self._images or {} -- 图片
self._widgets = self._widgets or {} -- 按钮等
self._armatures = self._armatures or {} -- 动画
self._contents = self._contents or {} -- 包含文字图片等实际顺序的数组
self._currentLine = self._currentLine or {} -- 渲染中的本行元素
self._strIndex = 1 -- 遍历的当前字符
self._currentColor = 1 -- 当前文字颜色
self._currentFontSize = self._defaultFontSize -- 当前文字大小
for k, v in pairs(self._texts) do
v:removeFromParent()
self._texts[k] = nil
end
for k, v in pairs(self._images) do
v:removeFromParent()
self._images[k] = nil
end
for k, v in pairs(self._widgets) do
v:removeFromParent()
self._widgets[k] = nil
end
for k, v in pairs(self._armatures) do
v:removeFromParent()
self._armatures[k] = nil
end
self._texts = {}
self._images = {}
self._widgets = {}
self._armatures = {}
self._contents = {}
self._renderPos = {
x = 0,
y = 0,
maxHeight = self._defaultFontSize -- 记录本行最大高度
}
self._currentLine = {}
if self._scheduleShow ~= nil then
cc.Director:getInstance():getScheduler():unscheduleScriptEntry(self._scheduleShow)
end
self._scheduleShow = nil
self._showSeq = 0
end
-- 判断utf8字符byte长度
-- 0xxxxxxx - 1 byte
-- 110yxxxx - 192, 2 byte
-- 1110yyyy - 225, 3 byte
-- 11110zzz - 240, 4 byte
local function chsize(char)
if not char then
print("not char")
return 0
elseif char > 240 then
return 4
elseif char > 225 then
return 3
elseif char > 192 then
return 2
else
return 1
end
end
-- 计算utf8字符串字符数, 各种字符都按一个字符计算
-- 例如utf8len("1你好") => 3
local function utf8len(str)
local len = 0
local currentIndex = 1
while currentIndex <= #str do
local char = string.byte(str, currentIndex)
currentIndex = currentIndex + chsize(char)
len = len +1
end
return len
end
-- 截取utf8 字符串
-- str: 要截取的字符串
-- startChar: 开始字符下标,从1开始
-- numChars: 要截取的字符长度
local function utf8sub(str, startChar, numChars)
local startIndex = 1
while startChar > 1 do
local char = string.byte(str, startIndex)
startIndex = startIndex + chsize(char)
startChar = startChar - 1
end
local currentIndex = startIndex
while numChars > 0 and currentIndex <= #str do
local char = string.byte(str, currentIndex)
currentIndex = currentIndex + chsize(char)
numChars = numChars -1
end
return str:sub(startIndex, currentIndex - 1)
end
function UILabelEx:onEnter()
self:ignoreAnchorPointForPosition(false)
self:setAnchorPoint(0, 1)
end
function UILabelEx:onExit()
self:clear()
end
-- 根据代码取文字颜色
function UILabelEx:getColor(code)
code = code or 1
local colors = {
cc.c3b(255, 255, 255), -- 白色
cc.c3b(0, 0, 0), -- 黑色
cc.c3b(255, 0, 0), -- 红色
cc.c3b(0, 255, 0), -- 绿色
cc.c3b(0, 0, 255), -- 蓝色
cc.c3b(0, 255, 255) -- 黄色
}
return colors[code] or colors[1]
end
function UILabelEx:setDefaultFontSize(size)
size = size or self._defaultFontSize
if size <= 0 then size = self._defaultFontSize end
self._defaultFontSize = size
end
function UILabelEx:setString(str)
self:clear()
self._contentStr = str
self:refresh()
self._scheduleShow = cc.Director:getInstance()
:getScheduler()
:scheduleScriptFunc(handler(self, self.scheduleShow),
UILabelEx.WAIT_FOR_MESSAGE,
false)
end
--[[
"普通文字\eC[color]颜色\eC[1]普通\n颜色\eS[size]大小\eS[24]普通大小\eI[img]←图片\eB[button]按钮\eE[emj]表情"
]]--
function UILabelEx:refresh()
print(utf8len(self._contentStr))
while self._strIndex <= utf8len(self._contentStr) do
self:progressContentString()
end
if self._show_fast then self._seq = #self._contents end
self:nextLine()
self._height = self._renderPos.y
self._rootWgt:ignoreAnchorPointForPosition(false)
self._rootWgt:setAnchorPoint(cc.p(0, 1))
self._rootWgt:setBackGroundColorType(ccui.LayoutBackGroundColorType.solid)
self._rootWgt:setBackGroundColor(cc.c3b(128, 128, 128))
self._rootWgt:setContentSize(self._width, self._height)
end
-- 处理特殊字符
function UILabelEx:progressContentString()
local str = utf8sub(self._contentStr, self._strIndex, 1)
self._strIndex = self._strIndex + 1
-- print("str:"..str)
if str == "\r" then -- 回车
return
elseif str == "\n" then -- 换行
self:progressNewLine()
elseif str == UILabelEx.C_CHR then -- 控制符
-- 处理中会影响self._strIndex
self:progressControlChar()
else -- 普通文字
self:progressNormalText(str)
end
end
-- 换行
function UILabelEx:progressNewLine()
self:nextLine()
end
-- 控制符
function UILabelEx:progressControlChar()
local chr = utf8sub(self._contentStr, self._strIndex, 1)
self._strIndex = self._strIndex + 1
chr = string.upper(chr)
-- print("char:"..chr)
local progressFlag = false -- 是否正常解析
local s, e, val = string.find(self._contentStr, "<(.-)>", string.len(utf8sub(self._contentStr, 1, self._strIndex)))
if val and s == string.len(utf8sub(self._contentStr, 1, self._strIndex)) then
progressFlag = true
print("val:"..(val ~= nil and val or "nil"))
if chr == "C" then
progressFlag = self:changeFontColor(tonumber(val)) -- 修改颜色
elseif chr == "S" then
progressFlag = self:changeFontSize(tonumber(val)) -- 修改字号
elseif chr == "I" then
progressFlag = self:progressImage(tonumber(val)) -- 插入图片
elseif chr == "B" then
progressFlag = self:progressBtn(val) -- 插入按钮
elseif chr == "E" then
progressFlag = self:progressEmoji(tonumber(val)) -- 插入表情
end
end
if progressFlag then
self._strIndex = self._strIndex + utf8len(val) + 2
else -- 处理失败,当做通常字符处理
self._strIndex = self._strIndex - 2
local str = utf8sub(self._contentStr, self._strIndex, 1)
self._strIndex = self._strIndex + 1
self:progressNormalText(str)
end
end
-- 普通文字
function UILabelEx:progressNormalText(chr)
print("progress normal:"..chr)
local uiText = ccui.Text:create()
uiText:setString(chr)
uiText:setVisible(self._show_fast)
uiText:setFontSize(self._currentFontSize)
uiText:setColor(self:getColor(self._currentColor))
self:addChild(uiText, 100)
if uiText:getContentSize().width > self._width then
print("too big width, scaled")
uiText:setScale(self._width / uiText:getContentSize().width)
end
if self._renderPos.x + uiText:getContentSize().width > self._width then
self:nextLine()
end
self:setElemPosition(uiText, self._renderPos.x, self._renderPos.y)
self._renderPos.x = self._renderPos.x + uiText:getContentSize().width
self._renderPos.maxHeight = (self._renderPos.maxHeight > uiText:getContentSize().height) and self._renderPos.maxHeight or uiText:getContentSize().height
self._texts[#self._texts + 1] = uiText
self._contents[#self._contents + 1] = uiText
self._currentLine[#self._currentLine + 1] = uiText
return true
end
function UILabelEx:changeFontColor(code)
if not code then return false end
self._currentColor = code
return true
end
function UILabelEx:changeFontSize(code)
if not code then return false end
if code <= 0 then code = self._defaultFontSize end
self._currentFontSize = code
return true
end
function UILabelEx:progressImage(code)
if not code then return end
print("progress image:"..code)
local image = t_image[code]
if not image then return false end
cc.SpriteFrameCache:getInstance():addSpriteFrames(image.plist)
local uiImage = ccui.ImageView:create()
uiImage:loadTexture(image.name, ccui.TextureResType.plistType)
uiImage:setVisible(self._show_fast)
self:addChild(uiImage, 100)
if uiImage:getContentSize().width > self._width then
print("too big width, scaled")
uiImage:setScale(self._width / uiImage:getContentSize().width)
end
if self._renderPos.x + uiImage:getContentSize().width > self._width then
self:nextLine()
end
self:setElemPosition(uiImage, self._renderPos.x, self._renderPos.y)
self._renderPos.x = self._renderPos.x + uiImage:getContentSize().width
self._renderPos.maxHeight = (self._renderPos.maxHeight > uiImage:getContentSize().height) and self._renderPos.maxHeight or uiImage:getContentSize().height
self._images[#self._images + 1] = uiImage
self._contents[#self._contents + 1] = uiImage
self._currentLine[#self._currentLine + 1] = uiImage
return true
end
function UILabelEx:progressBtn(str)
return false
end
function UILabelEx:progressEmoji(code)
if not code then return false end
print("progress emoji:"..code)
local animation = t_animation[code]
if not animation then return false end
ccs.ArmatureDataManager:getInstance():addArmatureFileInfo(animation.json)
local armature = ccs.Armature:create(animation.name)
armature:getAnimation():play("effect")
armature:setVisible(self._show_fast)
self:addChild(armature, 100)
if armature:getContentSize().width > self._width then
print("too big width, scaled")
armature:setScale(self._width / armature:getContentSize().width)
end
if self._renderPos.x + armature:getContentSize().width > self._width then
self:nextLine()
end
self:setElemPosition(armature, self._renderPos.x, self._renderPos.y)
self._renderPos.x = self._renderPos.x + armature:getContentSize().width
self._renderPos.maxHeight = (self._renderPos.maxHeight > armature:getContentSize().height) and self._renderPos.maxHeight or armature:getContentSize().height
self._armatures[#self._armatures + 1] = armature
self._contents[#self._contents + 1] = armature
self._currentLine[#self._currentLine + 1] = armature
return true
end
function UILabelEx:setElemPosition(elem, _x, _y)
elem:ignoreAnchorPointForPosition(false)
elem:setAnchorPoint(cc.p(0,0))
if _x then
local x = _x + elem:getContentSize().width * elem:getAnchorPoint().x
elem:setPositionX(x)
end
if _y then
local y = _y + elem:getContentSize().height * elem:getAnchorPoint().y
elem:setPositionY(-y)
end
end
function UILabelEx:nextLine()
-- 调整当前行元素高度,适应maxHeight
for k, v in pairs(self._currentLine) do
self:setElemPosition(v, nil, self._renderPos.y + self._renderPos.maxHeight)
end
self._renderPos.x = 0
self._renderPos.y = self._renderPos.y + self._renderPos.maxHeight + self._lineHeight / 2
self._renderPos.maxHeight = self._defaultFontSize
self._currentLine = {}
end
function UILabelEx:scheduleShow(dt)
if self._showSeq < #self._contents then
self._showSeq = self._showSeq + 1
self._contents[self._showSeq]:setVisible(true)
end
end
return UILabelEx
还没完成就是了。。。
require 'sdl'
require "rexml/document"
include REXML
SDL.init(SDL::INIT_VIDEO)
row = 4
col = 4
filename = "citizen-1.png"
image = SDL::Surface.load(filename)
w, h = image.w, image.h
if filename[/^(.*)?\.(png|jpg|bmp)?/i]
p $1, $2
end
picname = $1
ext = $2
doc = Document.new("<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">")
doc << XMLDecl.new(1.0, "utf-8")
root_node = doc.add_element("plist")
root_node.attributes["version"] = "1.0"
root_dict = root_node.add_element("dict")
# frames
frame_key = root_dict.add_element("key")
frame_key.text = "frames"
frame_dict = root_dict.add_element("dict")
for i in 0...row
for j in 0...col
key = Element.new("key")
key.text = "#{picname}_#{i * col + j}.#{ext}"
dict = Element.new("dict")
# dict
ek = []
ev = []
ek[0] = Element.new("key")
ek[0].text = "width"
ev[0] = Element.new("integer")
ev[0].text = (w / col).to_s
ek[1] = Element.new("key")
ek[1].text = "height"
ev[1] = Element.new("integer")
ev[1].text = (h / row).to_s
ek[2] = Element.new("key")
ek[2].text = "originalWidth"
ev[2] = Element.new("integer")
ev[2].text = (w / col).to_s
ek[3] = Element.new("key")
ek[3].text = "originalHeight"
ev[3] = Element.new("integer")
ev[3].text = (h / row).to_s
ek[4] = Element.new("key")
ek[4].text = "x"
ev[4] = Element.new("integer")
ev[4].text = (j * w / row).to_s
ek[5] = Element.new("key")
ek[5].text = "y"
ev[5] = Element.new("integer")
ev[5].text = (i * h / col).to_s
ek[6] = Element.new("key")
ek[6].text = "offsetX"
ev[6] = Element.new("real")
ev[6].text = "0"
ek[7] = Element.new("key")
ek[7].text = "offsetY"
ev[7] = Element.new("real")
ev[7].text = "0"
for t in 0...ek.size
dict.elements << ek[t]
dict.elements << ev[t]
end
frame_dict.elements << key
frame_dict.elements << dict
# end dict
end
end
# end frames
# metadata
metadata_key = root_dict.add_element("key")
metadata_key.text = "metadata"
metadatat_dict = root_dict.add_element("dict")
ek = []
ev = []
ek[0] = Element.new("key")
ek[0].text = "format"
ev[0] = Element.new("integer")
ev[0].text = "2"
ek[1] = Element.new("key")
ek[1].text = "textureFileName"
ev[1] = Element.new("string")
ev[1].text = filename
ek[2] = Element.new("key")
ek[2].text = "realTextureFileName"
ev[2] = Element.new("string")
ev[2].text = filename
ek[3] = Element.new("key")
ek[3].text = "size"
ev[3] = Element.new("string")
ev[3].text = "{#{w},#{h}}"
for t in 0...ek.size
metadatat_dict.elements << ek[t]
metadatat_dict.elements << ev[t]
end
#end metadata
# texture
texture_key = root_dict.add_element("key")
texture_key.text = "texture"
texture_dict = root_dict.add_element("dict")
ek = []
ev = []
ek[0] = Element.new("key")
ek[0].text = "width"
ev[0] = Element.new("integer")
ev[0].text = "#{w}"
ek[1] = Element.new("key")
ek[1].text = "height"
ev[1] = Element.new("integer")
ev[1].text = "#{h}"
for t in 0...ek.size
texture_dict.elements << ek[t]
texture_dict.elements << ev[t]
end
# end texture
file = File.open("#{picname}.plist", "w")
doc.write(file, 4, false, true)
file.close
p doc.xml_decl()
bug啥的慢慢修。