/// /// 背景類
///
tgamecycleback = class(tlsgameanimatesprite)
private
fspeed, fpartx: tlsint;
ftick: cardinal;
protected
procedure dodraw; override;
procedure doprocess(const movecount: tlssingle); override;
public
constructor create(const aparent: tlsgamesprite); override;
/// /// 捲動速度
///
property speed: tlsint read fspeed write fspeed;
end;
在宣告中 宣告了
fspeed 迴圈背景的移動速度
fpartx doprocess中的移動距離
ftick 時間節點
procedure tgamecycleback.dodraw;
/// /// 四捨五入
///
function gameround(afloat: single): tlsint;
begin
if afloat - trunc(afloat) >= 0.5 then
result := trunc(afloat) + 1
else
result := trunc(afloat);
end;
var bk: tlsgametexture;
tick: cardinal;
actualx: tlsint;
begin
tick := (gametimer.getticks - ftick); //移動一次的時間間隔
actualx := fpartx + gameround(fspeed * integer(tick) / (1000 div gametimer.fps)); //渲染時實際走的距離
if actualx >= gamedevice.windowsize.x then
actualx := actualx - gamedevice.windowsize.x;
bk := gameimages.items[self.patternindex];
if actualx > 0 then
begin
bk.boundsrect := lsrect(gamedevice.windowsize.x - actualx, 0, actualx, gamedevice.windowsize.y);
gamecanvas.usetexture(bk);
gamecanvas.draw2d(lspoint(self.x, self.y));
end;
bk.boundsrect := lsrect(0, 0, gamedevice.windowsize.x - actualx, gamedevice.windowsize.y);
gamecanvas.usetexture(bk);
gamecanvas.draw2d(lspoint(actualx, self.y));
end;
這裡面涉及到dodraw和doprocess的問題
因為dodraw和doprocess 的不同步所以 當dodraw花費的時間長時。導致邏輯運算比繪畫要多走, 這樣就會出現畫面卡。 為了讓畫面平滑滾動,在dodraw中做時時的移動渲染, actualx 就是在時間渲染時真正走的距離。在每走一次dodraw就計算一次,並繪畫一次,比在doprocess中處理移動在dodraw處理渲染要顯的更加平滑。
procedure tgamecycleback.doprocess(const movecount: tlssingle);
begin
inherited;
fpartx := fpartx + fspeed;
if fpartx >= gamedevice.windowsize.x then
dec(fpartx, gamedevice.windowsize.x);
ftick := gametimer.getticks;
end;
unity shader 實現迴圈移動背景
需要前置條件有以下幾點 1 需要一張能夠無縫連線並迴圈的 不連續 會在交接的地方 出現一條縫隙 2 將的 wrapmode格式改為 repeat 3 具體sader 如下 的wrapmode需要設定為repeat shader custom circulationbg scrollxspeed x ...
背景移動視差效果
我們在遊戲中有時會遇到 兩層背景的情況,要離我們遠的背景移動比較慢,近的比較快,如果不想自己寫寫兩層背景,我們可以利用引擎自帶的視差節點來做 auto sprite3 sprite create helloworld.png sprite3 setanchorpoint point 0,0 auto...
移動端背景縮放
background size 500px 200px 2 只寫乙個引數時為寬度,高度省略會等比例縮放 background size 500px 3 單位可以跟百分百 相對于父盒子來說的 background size 50 4 cover屬性 要完全覆蓋div盒子,等比例拉伸,可能有部分顯示不全...