krpnao action方法中文文档

一、krpano动作/功能参考

    1.编程逻辑/流量控制

(1)def(variable, type, value*)

定义具有特定类型的新变量,并可选地将其设置为给定值。当没有给定值且变量已经存在时,则具有当前值的变量将转换为给定类型。

boolean - true or false

number - a numeric value

integer or int - an integer value

uint - an unsigned integer value

string - text characters

object - an object with custom properties

array - a value-array

example:

def(b, boolean, true);

def(n, number, 123.456);

def(s, string, 'text');

def(obj, object);

def(obj.x, number, 0.0);

def(obj.y, number, 0.0);

(2)set(variable, value)set(object, variable:type=value, variable:type=value, ...)

set()操作是两种调用/使用可能性:

当使用两个参数调用时:

这是一个值的一个变量的正常集合。

当使用三个或更多参数调用时:

这是一个同时包含多个变量的多重集合。

在这里,变量将被设置或添加到对象中。

也可以选择指定变量的类型。

object

多个集合调用的对象-在此对象上将设置变量。

当对象不存在时,将创建它。

要在特定范围内定义变量,可以在这里使用全局或局部对象。

variable

变量名。

当变量不存在时,将创建该变量。

boolean - true or false

number - a numeric value

integer or int - an integer value

uint - an unsigned integer value

string - text characters

正常设置:

set(var1, 'hello');

set(var2, get(var1));

set(fullscreen, true);

set(layer[p1].visible, false);

set(hotspot[h1].scale, 2.5);

set(contextmenu.item[0].caption, 'hello item');

set(events.onxmlcomplete, null);

多组设置:

set(layer[p1], visible=false, alpha=0.5);

set(hotspot[hs1],

    type='text',

    ath=0.0,

    atv=0.0,

    html='Test Text',

    css='text-align:center',

    bg=false

);

set(global,

    test='Test text',

    havesomething:boolean=true,

    var2:string=get(var1),

    value:number=calc(1 + 2*3)

);

(3)action(get(variable), ... )

array[get(variable)]

get:variable" ... />

将变量解析为其值。get(var)操作是一个特殊操作,只能在调用其他操作或访问数组元素时用作参数。

当变量不存在时,get()将返回null。

注意-有些操作会自动尝试将其给定参数解析为其值。对于这些操作,不需要使用get(var)。

example:

set(dstvar, get(srcvar));

looktohotspot(get(name));

lookto(get(h), get(v), get(f));

showtext(get(msg));

tween(var,get(dstval));

set(pic, spot1);

set(hotspot[get(pic)].visible, false);

trace('xyz=', xyz, ' get(xyz)=', get(xyz));

txtadd(msg, 'fov=', get(view.fov));

(4)calc(variable, expression)

action(calc(expression), ... )

array[calc(expression)]

calc:expression" ... />

计算/求值/将表达式解析为其值。

calc(expression)操作是一个特殊操作,只能在调用其他操作或访问数组元素时用作参数。

存储结果的变量。当变量不存在时,将创建该变量。数学或逻辑表达式。

set(y_new, calc(y_old - offset1 + offset2));

set(animationtime, calc('%1' == 'instant' ? 0.0 : 0.5));

<layer url="calc:'%CURRENTXML%/skin/' + settings.image1" />

(5)copy(destination, source,typeconversion*)

copy()操作将内容从一个变量复制到另一个变量。默认情况下,这与:set(destination,get(source))相同。

目标变量。当变量不存在时,将创建它。

源变量。当变量不存在时,将为目标变量设置null。

类型转换(可选)

当设置为true(默认值)时:

当两个变量都有不同的类型时,源变量的值将转换为目标变量的类型。

设置为false时:

将源变量的值和类型复制到目标变量。

(6)delete(variable, ...)

删除并移除给定的变量。

参数:变量,任何变量名。

可以一次删除多个变量-只需传递多个变量名(用逗号分隔)。

set(tmp1, ...);set(tmp2, ...);delete(tmp1, tmp2);

(7)if(true/false,yes,no)

if(fullscreen, fullscreensetup(), windowsetup() );

if(fullscreen, set(layer[controls].visible, false) );

if(i LT 10, loop(next) );

if(var === null, set(var,0));

if(hotspot[spot1] === null, trace(there is no spot1 hotspot));

if((varA GT 5) AND (varA LT 10),

    trace('varA is between 5 and 10')

  );

if(varA AND varB AND varC, trace('all vars are true') );

if(var1 GT var2,

    trace('condition is true');

    lookto(100,20,50);

  ,

    trace('condition is false');

    lookto(0,0,100);

  );

if(a*2+b GT (c+3)*1.5 OR teststring == '123', ...);

if(

    test == 1, trace('test is 1'),

    test == 2, trace('test is 2'),

    test == 3, trace('test is 3'),

    trace('test is someting else')

);

(8)delayedcall(delay, actions);delayedcall(id, delay, actions)

在给定的时间后调用/执行给定的操作。

参数:

id(可选)

delayedcall的可选唯一id。

此id可用于通过调用stopdelayedcall(id)来停止delayedcall。

延迟

执行操作前等待的秒数。

行动

延迟后要调用的操作。

delayedcall(5.0, hidelogo() );

delayedcall(10, looktohotspot(spot1);loadpano(pano2.xml); );

delayedcall(1, showtext('hello');      );

delayedcall(4, showtext('to the pano'); );

<action name="updatemousepos">

  copy(layer[cursor].x, mouse.x);

  copy(layer[cursor].y, mouse.y);

  delayedcall(0.02, updatemousepos() );

</action>

(9)stopdelayedcall(id);

使用给定的id停止delayedcall。

<events name="introimage_events"

        onnewpano="delayedcall(introimage, 5.0, hide_introimage() );"

        onremovepano="stopdelayedcall(introimage);"

(10)nexttick(actions)

在下一个处理中调用/执行给定的操作-这意味着在当前操作之后,但要尽快。

(11)callwhen(condition, actions);callwhen(id, condition, actions);

在条件为真或将成为真时调用给定的操作。

当条件当前不是true时,则callwhen()操作将一直等待,直到条件变为true。

参数:

id(可选)

callwhen的可选唯一id。

通过调用stop callwhen(id),此id可用于停止等待的callwhen。

条件

逻辑表达式。

callwhen()操作将在每帧中不断检查此条件,直到它变为真。

行动

条件为真时要调用的操作。

callwhen(plugin[video].loaded, plugin[video].playvideo(...); );

callwhen(plugin[maps].loaded, plugin[maps].setcenter(...); );

(12)stopcallwhen(id);

使用给定的id停止仍在等待的呼叫。

(13)for(startactions, condition, nextactions, loopactions)

首先调用startactions,然后检查条件,当它为true时,然后调用loopactions,然后调用nextactions,然后再次开始检查条件和循环。

for(set(i,0), i LT 10, inc(i), trace('i=',i) );.

for(set(i,0), i LT layer.count, inc(i),

  trace('layer[',i,'].name=',layer[get(i)].name);

);

(14)loop(condition, loopactions);asyncloop(condition, loopactions, doneactions*);

只要条件为true,就将重复调用loopactions。当循环本身完成时,normal loop()操作将继续执行以下操作。asyncloop()将中间继续执行以下操作,并每帧执行一次loopactions。当异步循环最终完成时,将调用doneAction。

ondown="asyncloop(pressed, layer[scrollarea].scrollby(+2,0) );"

onover="asyncloop(hovering, updatemousepos(), hideinfo() );"

asyncloop(true, framehandler() )

(15)renderloop(loopactions);stoprenderloop();

renderloop()操作将在每帧执行一次loopactions。

要停止循环,需要在loopactions内部调用stoprenderloop()操作。

krpano-Action-Code Example:

renderloop(

    if(...done with rendering...,

      stoprenderloop();  );

);

Javascript-Code Example:

krpano.actions.renderloop(function(){

    if(...done with rendering...){

      krpano.actions.stoprenderloop();

    }

});

(16)setinterval(id, delay, actions)clearinterval(id)

重复调用/执行给定的操作,并在两个操作之间有一个延迟时间间隔。

此id可用于通过调用clearinterval(id)来停止间隔。

延迟

操作调用之间等待的秒数。

使用0作为延迟时,每帧将调用一次操作。

行动

调用每个延迟秒的操作。

setinterval(time, 1.0,

    jsget(time, (new Date()).toLocaleTimeString(); );

    trace('time=',time);

  );

<events onkeydown="setinterval(get(keycode), 0.1, trace(keycode); );"

        onkeyup="clearinterval(get(keycode));"

        />

(17)toggle(variable)

toggle操作在true和false之间切换给定(布尔)变量的值。

toggle(fullscreen);

toggle(layer[button1].visible);

(18)switch(variable)switch(variable, value1, value2, ...)

开关动作在几个状态之间/通过几个状态来切换给定变量的值。每次调用开关动作时,值都将被切换/更改。

当只给出没有值参数的变量本身时,变量将在true和false之间切换。

当有两个或多个作为参数给定的值时,变量将切换所有这些值(从左到右)

switch(fullscreen);

switch(layer[button1].visible);

switch(layer[button1].alpha, 1.0, 0.5);

switch(layer[child].parent, button1, button2, button3);

switch(destpos, -100, 0, +100); tween(y,get(destpos));

(19)break()

中断/停止当前流中的操作调用的执行,以及从一个嵌套级别向上的操作调用(例如,当在if()调用内部调用时,也将停止if外部的流)。

当在for()或loop()循环中使用时,break()调用也将停止该循环。

(20)exitcall();

直接退出/停止当前操作“调用”。

“调用”要么是对<action>的调用,要么是对包含action代码的变量的调用,要么是对事件的action代码的调用。

(21)callwith(caller, actions);

使用特定的插件/层或热点元素作为调用方调用krpano操作代码。这可用于直接属性访问或模拟对这些元素的事件调用。

参数:

来电者

应该用作调用方的元素。

只能是<plugin>/<layer>或<hotspot>元素。

行动

任何krpano动作代码。

代码将在调用方的“context”中执行,这意味着对其属性的“直接”访问。

callwith(layer[test], onclick);

callwith(layer[test], trace('test pos=',x,'/',y); );

callwith(layer[test], tween(alpha, 0.0); );

(22)scope(scope, actions);

在特定范围内调用krpano操作代码。

scope(localonly, for(set(i,0), i LT 10, inc(i), trace(i)); );

scope(private:my_xml_plugin, trace(internal_var); );

(23)parentscopeset(variable, value)

将变量设置为a值-类似于Set()调用-但在父操作的范围内。

这可用于将内部本地作用域操作的结果返回/传递回外部作用域操作。

(24)linkeventscope(element)

将当前本地作用域链接到给定元素的事件。

当调用该元素的事件(例如onclick)时,事件代码中将使用相同的作用域。默认情况下,事件始终使用全局范围。

注意-当链接到一个作用域时,有必要使用调用者来寻址元素作用域本身!

(25)assignstyle(elementname, styles)

将属性从一个或多个<style>元素复制到自定义元素。

assignstyle(layer[test], 'teststyle');

assignstyle(layer[test], 'style1|style2');

(26)copyattributes(destobject, srcobject)

将所有属性从一个对象复制到另一个对象。

注意-copyattributes()操作的参数必须是对象,而不是对象的名称/路径!这意味着可能需要使用get()操作来解析名称/路径。

copyattributes(get(layer[test]), get(style[style1]));

(27)events.dispatch(eventname, instantly*)

从所有<events>元素分派/调用给定事件。

参数:

事件名称

事件的名称。

立即(可选)

布尔设置(默认为true或false)。

当设置为true时,将立即调用和执行事件;当未设置或设置为false时,将在当前操作调用后调用事件。

<events name="events1" myevent="trace(events1...);" />

<events name="events2" myevent="trace(events2...);" />

events.dispatch(myevent);

(28)tohex(variable, prefix*, length*)tohex(destinationvariable, variable, prefix, length)

将给定变量的内容转换为十六进制字符串。

可用于创建html/css颜色字符串。

tohex(color,'#',6);

set(color, ...an_external_integer_input...);

tohex(color,'#',6);

txtadd(layer[text1].css,'color:',get(color),';');

(29)tolower(variable)toupper(variable)tolower(destinationvariable, sourcevariable)toupper(destinationvariable, sourcevariable)

将给定变量的内容转换为小写或大写。

(30)txtadd(destination, txt1, txt2*, txt3*, ...)

txtadd操作可用于将多个文本/值添加/连接在一起。

该操作可以与2个或更多参数一起使用。当只使用两个参数(目的地和文本)时,文本将添加到目的地变量的当前值。

参数:

目的地

存储连接文本的目标变量。

当变量不存在时,将创建该变量。

txt1,txt2,txt3。。。(可选)

将连接在一起的文本。

如果只使用一个txt参数,则此文本将添加到当前目标变量的内容中。

注意-当应该使用变量的内容时-则必须使用get()操作来解析变量!

txtadd(picfilename,'%CURRENTXML%/pic_',get(pic),'.jpg');

txtadd(crop,'0|',get(ypos),'|333|285');

txtadd(pname, 'thumbbar_image_', get(i));

txtadd(layer[text].html,'[p]',get(data[txt1].content),'[/p]');

txtadd(msg,get(view.fovtype),'=',get(fov),'°');

(31)subtxt(dstvar, srcvar, startpos, len)

subxt操作提取其他文本的一部分。

参数:

将存储提取文本的目标变量。当变量不存在时,将创建该变量。包含源文本的变量或文本。文本提取的起始位置。要提取的文本的长度。

(32)indexoftxt(index, txt, searchtxt, startindex*)

indexoftxt操作给出“txt”字符串中“searchtxt”值第一次出现的位置。将存储“searchtxt”第一次出现的索引的变量。

如果从未发生过“searchtxt”,则为-1。当变量不存在时,将创建该变量。

应该在其中搜索的文本。要搜索的文本。startindex(可选)开始搜索文本的起始索引/位置(默认为0)。

(33)txtreplace(var, searchtext, replacetext)txtreplace(dstvar, srcvar, searchtext, replacetext)

txtreplace操作在“var/srcvar”中搜索“searchtext”的所有匹配项,并将其替换为“replacetext”。

参数:

变量/srcvar/dstwar要搜索的变量(var,srcvar)和结果的存储位置(var,dstvar)。当变量不存在时,将创建该变量。

搜索文本

应该搜索的文本。

替换文本

将替换“searchtxt”出现的文本。

(34)txtsplit(string, separator, resultingarray)txtsplit(string, separator, var1, var2, ...)

txtsplit操作在“var/srcvar”中搜索所有出现的“searchtext”,并将其替换为“replacetext”。

分隔符或字符串。

resultingarray(使用3个参数调用txtsplit()操作时)

将拆分部分作为“value”属性包含的数组变量的名称。

变1,变2。。。(使用4个或更多参数调用txtsplit()操作时)

拆分的结果将直接分配给给定的变量。

当使用null作为变量时,该值将被忽略/跳过(只能用于提取某些特定值)。

txtsplit('1|2|3', '|', a, b, c);

trace('a=',get(a), ' b=',get(b), ' c=',get(c));

a=1 b=2 c=3

Split into an array:

txtsplit('x|y|z', '|', arr);

for(set(i,0), i LT arr.count, inc(i),

trace('arr[',get(i),'].value=',arr[get(i)].value);

);

Result:

arr[0].value=x

arr[1].value=y

arr[2].value=z

(35)txtjoin(var, separator, array)txtjoin(var, separator, var1, var2, ...)

txtjoin操作浓缩给定数组或给定变量中的所有元素,并在它们之间插入指定的分隔字符串。

当变量不存在时,将创建该变量。

将在元素之间插入的分隔符或字符串。

数组(使用3个参数调用txtjoin()操作时)

数组变量的名称。

变1,变2。。。(使用4个或更多参数调用txtjoin()操作时)

要联接的变量或值。

txtsplit(image.prealign, '|', rx, ry, rz);

add(ry,90);

txtjoin(image.prealign, '|', rx, ry, rz);

Split into an array:

txtsplit('x|y|z', '|', arr);

for(set(i,0), i LT arr.count, inc(i),

trace('arr[',get(i),'].value=',arr[get(i)].value);

);

Result:

arr[0].value=x

arr[1].value=y

arr[2].value=z

(36)fromcharcode(var, charcode)

fromcharcode操作将给定的字符代码转换为字符串并存储在给定的变量中。存储字符的变量。

当变量不存在时,将创建该变量。

字符码

作为数字的Unicode字符代码。

(37)escape(var)escape(var, text)unescape(var)unescape(var, text)

escape和unescape操作是转义给定变量或给定文本的内容,然后将结果存储到给定变量中。

With text参数-转义/未转义文本将存储在其中的变量。将被转义/取消转义的文本。

(38)tween(variable, value, time*, tweentype*, donecall*, updatecall*)

tween操作可用于时间控制的动画/变量更改。该操作将动态地将变量的当前值更改为给定值。可以同时将多个变量连接在一起。因此,请指定多个变量、值和由|字符分隔的二十种类型。如果指定了多个变量,但只有一个值和/或只有一个tweentype,则所有变量将tween转换为相同的值和/或使用相同的tweentype。对于所有给定的变量,时间、完成和更新调用将始终相同。

Parameters:{variable,value,time,tweentype,donecall ,updatecall }

tween(scale,2);

tween(rotate,90);

tween(width,50%);

onover="tween(alpha,0.7,distance(0.3,0.2));"

onout="tween(alpha,1.0,distance(0.3,0.2));"

set(alpha,0);

set(visible,true);

tween(alpha, 1.0 ,0.3);

tween(layer[logo].width, get(destwidth));

set(layer[image].enabled,false);

tween(layer[image].alpha,0.0,0.5,default,removeplugin(image));

set(view.stereographic,true);

tween(view.vlookat, 90.0, 2.0);

tween(view.fisheye, 1.0, 2.0);

tween(view.fov, 150.0, 2.0);

(39)stoptween(variable, ...);

stoptween操作停止当前正在运行的tween操作。

ondown="tween(layer[text].y, 10, distance(400,0.7), linear);"

onup="stoptween(layer[text].y);"

(40)tweentypes;https://krpano.com/docu/actions/#setinterval

(41)loadpano(xmlpath, vars*, flags*, blend*)

loadscene(scenename, vars*, flags*, blend*)

loadpanoscene(xmlpath, scenename, vars*, flags*, blend*)

loadxml(xmlstring, vars*, flags*, blend*)

loadpano(pano2.xml);

loadpano(pano2.xml, null, MERGE, BLEND(1));

loadscene(scene1);

loadscene(scene1, null, MERGE, BLEND(1));

loadxml('<krpano><image><sphere url="pano.jpg"/></image></krpano>');

loadxml(get(data[xml].content), null, KEEPALL);

loadpano('%VIEWER%/pano.xml', null, MERGE, BLEND(2));

loadpano(sphere.xml, image.hfov=1.0&view.limitview=fullrange);

(42)openurl(url, target*)

openurl('https://krpano.com',_self);

openurl('help.html');

(43)lookat(h, v, fov*, distortion*, architectural*, pannini*)

看这个全景位置。

Parameters:{h,v,fov,distortion,architectural,pannini }

lookat(0,0);

lookat(0,0,90);

loadpano(pano.xml);

lookat(45.1, -20.2, 110.0);

(44)lookto(toH,toV,fov*,motiontype*,shortestway*,nonblocking*,donecall*)

looktohotspot(hotspotname*, fov*, motiontype*, shortestway*)

moveto(toH, toV, motiontype*)

zoomto(fov, motiontype*)

将视图从当前查看位置移动到给定位置。

注意-在移动过程中,用户界面和所有其他操作都被阻止。这意味着下一个操作将在当前操作完成时执行。oninterrupt操作可用于使用户能够中断这些操作。

Parameters:{toH,toV,hotspotname ,fov ,motiontype 、shortestway,nonblocking ,donecall}

moveto(100.0,5,linear(10));

zoomto(130,smooth());

lookto(33,-22,30,smooth(100,50,20));

looktohotspot(hotspot1);

looktohotspot(hotspot2, 40);

looktohotspot(hotspot3, 25, smooth(100,50,20));

looktohotspot(get(name));

(45)adjusthlookat(desthlookat)

调整手动粗花呢的view.hlookat值。

它修复了360度环绕,以最短的方式到达desthlookat。

参数:

当desthlookat是变量名时,将自动使用该变量的值。

current view.hlookat变量将调整(不更改当前视图)为该值旁边的变量。

adjusthlookat(140);

tween(view.hlookat, 140);

(46)adjust360(source_ath, target_ath)

将源路径变量调整为最短的水平360度(相对于目标路径变量)。

源/开始路径值。

source路径必须是变量的名称。

目标路径

目标/目标ath值。

当desthlookat是变量名时,将自动使用该变量的值。

将热点移动到当前水平查看位置:

adjust360(hotspot[test].ath, view.hlookat);

tween(hotspot[test].ath, get(view.hlookat), 1.0);

(47)getlooktodistance(result, toH, toV, fromH*, fromV*)

获取fromH/fromV和toH/toV观察点之间的球面距离(以度为单位)。结果将始终介于0.0和180.0之间(在球体上不可能超过180度的距离)。

Parameters:{result,toH,toV,fromH ,fromV }

(48)stoplookto()

停止非阻塞的lookto/looktohotspot/moveto/zoomto操作。

(49)stopmovements()

立即停止所有用户驱动(通过鼠标、键盘或触摸)的平移和缩放运动。

(50)wait(parameter)

等待几秒钟或等待事件。

注意-用户界面和以下所有操作将在等待期间被阻止。这意味着当当前等待操作完成时,将执行当前调用中的下一个操作。oninterrupt操作可用于使此操作可被用户中断。

oninterrupt(break);

lookto(150,30,70);

wait(3);

lookto(242,0,150);

lookto(280,-10,50);

wait(3);

loadpano(pano2.xml,null,MERGE,BLEND(2));

lookat(100,50,5);

wait(BLEND);

lookto(100,50,150);

(51)oninterrupt(actions)

此操作可在启动一组阻止用户界面的操作(如lookto、looktohotspot、moveto、zoomto、wait和tween with wait as donecall)之前使用。当这些操作中的任何一个被用户中断时(例如,通过单击),这些操作将停止,并执行在oninterrupt操作中定义的操作。

oninterrupt(break);

lookto(150,30,70);

wait(3);

lookto(242,0,150);

lookto(280,-10,50);

wait(3);

oninterrupt( trace(user interrupt); );

lookto(0,0,90);

lookto(90,0,90);

lookto(180,0,90);

lookto(270,0,90);

lookto(0,0,90);

(52)screentosphere(x,y, h,v)spheretoscreen(h,v, x,y, stereoside*)

屏幕坐标和球面坐标之间的转换操作。

screentosphere操作将x/y变量转换为h/v变量,spheretoscreen操作将h/v变量转换为x/y变量。

参数:

x/y轴

以左上边缘像素为单位显示屏幕坐标的变量。

高压

以度(360x180)为单位的球坐标变量。

立体(可选)

对于立体渲染-定义坐标应映射到哪个屏幕边。可能的设置:l表示左侧,r表示右侧,或未设置/未定义正常的非立体屏幕坐标。

笔记:

x,y,h,v参数必须是变量名,不能使用值!

当变量不存在时,将创建它。

screentosphere(mouse.x, mouse.y, toh, tov);

(53)screentolayer(layer, screenx,screeny, layerx,layery)layertoscreen(layer, layerx,layery, screenx,screeny)

用于在屏幕/阶段和相对<layer>坐标之间转换的操作。

screentolayer(bar, mouse.stagex,mouse.stagey, lx,ly);

div(fill, lx, layer[bar].pixelwidth);

mul(fill, 100);

clamp(fill, 0, 100);

txtadd(layer[barfill].width, get(fill), '%');

(54)spheretospace(h,v,depth, x,y,z)spacetosphere(x,y,z, h,v,depth)

用于在球面坐标和XYZ三维空间坐标之间转换的操作。将热点位置从球面坐标转换为空间坐标:

spheretospace(ath,atv,depth, tx,ty,tz);

set(ath,0);

set(atv,0);

set(depth,0);

and back:

spacetosphere(tx,ty,tz, ath,atv,depth);

set(tx,0);

set(ty,0);

(55)remapfovtype(fov, srcfovtype, dstfovtype)remapfovtype(fov, srcfovtype, dstfovtype, width, height)

将一个fov值从一个fov类型重新映射到另一个fov类型。

当改变视场类型,同时,重新映射视场时,结果的全景缩放将保持不变。

Parameters:{fov,srcfovtype,dstfovtype,width ,height}

set(view.fovtype, HFOV);

set(view.fov, 90);

set(view.fovtype, VFOV);

remapfovtype(view.fov, HFOV, VFOV);

(56)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容